SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL
前言
通过前面的MyBatis部分学习,已经可以使用MyBatis独立构建一个数据库程序,基本的增删查改/关联查询等等都可以实现了。简单的单表操作和关联查询在实际开的业务流程中一定会有,但是可能只会占一部分,很多业务需求往往夹杂着一些需要我们在后台去判断的参数,举个例子,我们基本都上过购物网站,想要查看心仪的商品列表,可以通过商品分类筛选,也可以通过商品价格来筛选,还可以同时根据分类和价格来筛选,这里我们可以简单的理解为通过商品分类和商品价格的筛选分别为select语句中where后面的2个子句,类似category=XXX和price > xxx and price <xxx,具体怎么筛选要看用户怎么操作。如果按照之前的路子,我们要分别定义三个select方法和sql语句,这个就涉及到了一个静态动态的问题,用户的操作、输入等等都是不确定的,即动态的,但是我们之前在sql映射文件中写的语句都是针对单个操作单个想法去写死的,即静态的。这样一来,随着需求和判断的的不断叠加,这个代码量会很可怕。另外一个问题,如果大家有使用Java代码拼接过复杂SQL语句经历,应该不会感到很方便,本人使用hibernate的时候也拼接过HQL,共同点就是那些分隔符、空格之类的写起来很麻烦,也容易出错。MyBatis提供了动态SQL这一特性,能同时改良上述两种开发场景。
总览
MyBatis提供的动态SQL元素实际就是通过在我们的sql语句中嵌入标签实现动态,具体标签如下图所示。
aaarticlea/png;base64,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" alt="" />
熟悉jsp、jstl、el表达式那套的,应该对里面大部分标签名都不陌生,也比较容易理解,具体用法下面分别进行解析。为了结合具体的使用场景,将上面元素细分为四组来演示,分别为【if、where、trim】、【if、set、trim】、【choose、when、otherwise】、【foreach】
背景
private Integer id; //主键
private String name; //姓名
private String gender; //性别
private Integer age; //年龄
private String ifIT; //是否从事IT行业
aaarticlea/png;base64,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" alt="" />
if、where、trim篇
1.查询语句中的if
以上为我们定义的一个人的属性,数据库中也有一个人的数据表。现在假设需要查询人中的所有男性,同时如果输入参数中年龄不为空,就根据性别和年龄查询。在没有使用动态SQL之前,按照我们的惯有思路,我们需要在Mapper接口中定义两个查询方法,同时分别对应在SQL映射文件中定义两个<select>语句,如下:
<select id="selectPerson1" parameterType="psn" resultMap="personResultMap">
select * from person where GENDER = '男'
</select> <select id="selectPerson2" parameterType="psn" resultMap="personResultMap">
select * from person where GENDER = '男' and AGE = #{age}
</select>
这样一来,随着类似的需要越来越多,我们的方法和SQL语句量会增加到很多,并且会发现,其实语句中存在很多重复部分。那么有没有办法能同时应对类似的相关需求,同时减少代码量呢?动态SQL就提供了相关的功能实现这些需求,例如上述场景,我们即可只需定义一个方法,对应的SQL语句写成如下:
<select id="selectPerson" parameterType="psn" resultMap="personResultMap">
select * from person where GENDER = '男'
<if test="age != null">
and AGE = #{age}
</if>
</select>
在这项<select>我们将确定的(静态的的部分)select * from person where GENDER = '男'和后面的<if>部分结合起来,通过动态SQL提供的<if>标签给语句预加一层判断,test属性值为布尔类型,true或者false,当为true(即真)时,才会把<if>标签下的内容添加到语句中响应为值,这里的test中即判断输入参数中年龄是否为空,不为空则添加【and AGE = #{age}】到【select * from person where GENDER = '男'】后面,为空则不加,这样就达到了同时满足两种需要,但只定义了一个方法和一条SQL。
2.查询语句中if的where改进
进一步扩展如果想把where后面的部分都动态化,这里以性别为例,查询时如果参数中有不为空的性别值,则根据性别查询,反之则查询所有,有了前面if的学习,我们不难写出如下动态SQL:
<select id="selectPerson1" parameterType="psn" resultMap="personResultMap">
select * from person where
<if test="gender != null">
gender = #{gender}
</if>
</select>
这时候问题来了,当性别不为空时,语句是 select * from person where gender = #{gender} ,这样还能正常查询出我们想要的结果,但是如果性别为空,会发现语句变成了 select * from person where ,这显然是生成一个错误的SQL了,为了解决类似的问题,动态SQL<where>能帮我们解决这个问题,我们可以将上述语句优化成如下:
<select id="selectPerson1" parameterType="psn" resultMap="personResultMap">
select * from person
<where>
<if test="gender != null">
gender = #{gender}
</if>
</where>
</select>
这样mybatis在这里会根据<where>标签中是否有内容来确定要不要加上where,在这里使用<where>后,如果年龄为空,则前面引发错误的where也不会出现了。
3.针对where的trim同等转换
进一步扩展,如果我们查询有多个参数需要判断,根据性别和年龄参数,有了前面<if>和<where>的了解,我们就可以写出如下SQL:
<select id="selectPerson2" parameterType="psn" resultMap="personResultMap">
select * from person
<where>
<if test="gender != null">
gender = #{gender}
</if>
<if test="age != null">
and age = #{age}
</if>
<where>
</select>
乍一看基本没什么毛病了,在这里【性别空、年龄空】、【性别不空、年龄不空】、【性别不空、年龄空】都没问题,但是如果是【性别空、年龄不为空】,按理来说语句变成这样 select * from person where and age = #{age} ,然后如果你动手尝试一下,就会发现,并不会,这也体现了<where>一个强大之处,它不仅会根据元素中内容是否为空决定要不要添加where,还会自动过滤掉内容头部的and或者or,另外空格之类的问题也会智能处理。
MyBatis还提供了一种更灵活的<trim>标签,在这里可以替代<where>,如上面的定义可以修改成如下,同样可以实现效果:
<select id="selectPerson2" parameterType="psn" resultMap="personResultMap">
select * from person
<trim prefix="where" prefixOverrides="and |or " >
<if test="gender != null">
and gender = #{gender}
</if>
<if test="age != null">
and age = #{age}
</if>
</trim>
</select>
<trim>标签共有四个属性,分别为【prefix】、【prefixOverrides】、【suffix】、【suffixOverrides】,prefix代表会给<trim>标签中内容加上的前缀,当然前提是内容不为空,prefixOverrides代表前缀过滤,过滤的是内容的前缀,suffix和suffixOverrides则分别对应后缀。例如上面的语句中如果性别和年龄都不为空,<trim>会在添加where前缀的同时,把第一个<if>中的and去掉,这样来实现<where>同样的功能。
if、set、trim篇
1.更新语句中的if
前面都是查询,我们换个更新试试,这里更新我们只想更新部分字段,而且要根据参数是否为空来确定是否更新,这里以姓名和性别为例。
<update id="updatePerson">
update person set
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender}
</if>
</update>
2.更新语句中if的set改进
这里如果【姓别为空】或者【性别和性别都为空】,类似之前的where问题同样也来了,所以MyBatis同样也提供了<set>标签来解决这一问题,所以上面的定义可以优化成如下所示
<update id="updatePerson1">
update person
<set>
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender},
</if>
</set>
</update>
在这里,<set>会根据标签中内容的有无来确定要不要加上set,同时能自动过来内容后缀逗号,但是有一点要注意,不同于<where>,当<where>中内容为空时,我们可以查出所有人的信息,但是这里更新语句中,<set>内容为空时,语句变成 update person ,还是会出错,同时更新操作也不会生效了。
3.针对set的trim同等转换
之前介绍到的<trim>灵活之处,在这里通过修改属性值,也能用来替代<set>,上面的定义使用<trim>改写如下所示:
<update id="updatePerson2">
update person
<trim prefix="set" suffixOverrides=",">
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender}
</if>
</trim>
</update>
这里设置前缀为set,后缀过滤为逗号“,”,这样一来,在if判断之后会引发报错的逗号将不会存在,同样可以实现相关功能。
choose、when、otherwise篇
前面我们了解到的,<select>查询语句中where后面,<if>通过判断各个参数是否为空来确定是否添加其子句内容到where后面,是一个累加的关系,但是如果我们的需求,不是累加,而是多选一,例如姓名(name)、性别(gender)、是否从事It行业(ifIT),具体来讲就是,如果优先判断姓名是否有值,有的话就根据姓名查,没有的话其次再判断性别是否有值,有的话就根据性别查,也没有的话就根据是否从事IT行业来查。这样一来,按照前面了解到的<if><where>似乎有些头大,不仅有多重判断,还涉及到一个优先级先后问题,一下子似乎很难快速想到一个简单方便的路子。MyBatis同样提供了一套<choose>、<when>、<otherwise>来帮我们解决类似上面的问题。
如果觉得不太好记忆,可以联想Java中条件判断的switch,switch对应这里的<choose>,case对应<when>,一旦某个case条件满足了会break跳出,同时如果都不满足,最后还有个default可以对应这里的<otherwise>,所以最终<when>和<otherwise>中有且只有一个会满足,也就只有一项内容会被添加进去。按照上面的需求,我们可以写出如下动态SQL:
<select id="selectPersonExt" parameterType="psn" resultMap="personResultMap">
select * from person
<where>
<choose>
<when test="name!=null">
NAME = #{name}
</when>
<when test="gender!=null">
GENDER = #{gender}
</when>
<otherwise>
IF_IT = #{ifIT}
</otherwise>
</choose>
</where>
</select>
即可方便的实现该场景。
foreach篇
for循环大家应该都不陌生,这里的foreach同样主要用来迭代集合,那么SQL中哪些地方会用到集合呢,用过in的应该比较熟悉,例如下面select语句:
select * from person where age in(10,20,30,40)
上面语句可以查询出年龄为10或20或30或40的人,这些年龄数据是一个集合,但是通过参数传入的集合是动态的,我们不可能预知数值和像这样写死,MyBatis提供的<foreach>即可实现该功能。该集合作为参数传入,以上场景方法定义和SQL语句可以写成如下所示:
List<Person> selectForeachAge(List<Integer> ageList);
<select id="selectForeachAge" resultMap="personResultMap">
select * from person where age in
<foreach collection="list" item="age" index="i" open="(" close=")" separator=",">
#{age}
</foreach>
</select>
这里我们可以看到,<foreach>共有6个属性。
item:表示集合迭代时元素的别名,这里对应#{age}中的age
index:集合迭代时索引,用于表示集合此时迭代到的位置
open、close、separator:这三个分别代表起始、结束、分隔符,在这里,我们用过in语句查询时应该都知道,使用到集合的查询语句结构关键部分可以描述如下所示: SELECT column_name(s) FROM table_name WHERE column_name IN (value1,value2,...) 。可以看到在IN关键字的后面,集合内容两边分别是左括号、右括号,中间集合的各个元素之间用逗号隔开,正好与这里的三个属性分别对应。
collection:这个属性是必要的,在这里我们传入的是单个参数即一个List,所以属性值就是list。
完整示例
上面就是动态SQL的各个元素的基本内容,熟悉之后会让我们编写SQL时更加方便和灵活,下面给出完整代码示例供参考。
maven工程结构如下图
aaarticlea/png;base64,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" alt="" />
MyBatis配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 这里可以定义类的别名,在mapper.xml文件中应用会方便很多 -->
<typeAliases>
<typeAlias alias="psn" type="com.mmm.pojo.Person" />
</typeAliases>
<!-- 环境配置 -->
<environments default="envir">
<environment id="envir">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.0.100:3306/ssm?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="abc123"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mmm/mapper/personMapper.xml"/>
</mappers>
</configuration>
实体类(Person)
package com.mmm.pojo; public class Person {
private Integer id; //主键
private String name; //姓名
private String gender; //性别
private Integer age; //年龄
private String ifIT; //是否从事IT行业 public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getIfIT() {
return ifIT;
}
public void setIfIT(String ifIT) {
this.ifIT = ifIT;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", gender=" + gender
+ ", age=" + age + ", ifIT=" + ifIT + "]";
} }
Mapper接口(PersonMapper)
package com.mmm.mapper; import java.util.List; import com.mmm.pojo.Person; public interface PersonMapper { //查找所有Person对象,返回集合类型,用于在测试类中查看动态SQL结果
List<Person> selectAll(); //用于测试查询语句中if、where、trim
List<Person> selectPerson(Person p);
List<Person> selectPerson1(Person p);
List<Person> selectPerson2(Person p); //用于测试更新语句中if、set、trim
void updatePerson(Person p);
void updatePerson1(Person p);
void updatePerson2(Person p); //用于测试choose、where、otherwise
List<Person> selectPersonExt(Person p); //用于测试foreach
List<Person> selectForeachAge(List<Integer> ageList); }
SQL映射文件(personMapper.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.mmm.mapper.PersonMapper">
<resultMap type="psn" id="personResultMap">
<id column="ID" property="id" />
<result column="NAME" property="name" />
<result column="GENDER" property="gender" />
<result column="AGE" property="age" />
<result column="IF_IT" property="ifIT" />
</resultMap> <select id="selectAll" resultMap="personResultMap">
select * from person
</select> <!-- 针对查询语句中if -->
<select id="selectPerson" parameterType="psn" resultMap="personResultMap">
select * from person where GENDER = '男'
<if test="age != null">
and AGE = #{age}
</if>
</select> <!-- 针对where -->
<select id="selectPerson1" parameterType="psn" resultMap="personResultMap">
select * from person
<where>
<if test="gender != null">
gender = #{gender}
</if>
</where>
</select> <!-- 针对where的 trim转换 -->
<select id="selectPerson2" parameterType="psn" resultMap="personResultMap">
select * from person
<trim prefix="where" prefixOverrides="and |or " >
<if test="gender != null">
and gender = #{gender}
</if>
<if test="age != null">
and age = #{age}
</if>
</trim>
<trim prefix="" prefixOverrides="" suffix="" suffixOverrides=""></trim>
</select> <!-- 针对更新语句中if -->
<update id="updatePerson">
update person set
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender}
</if>
where ID = #{id}
</update> <!-- 针对set -->
<update id="updatePerson1">
update person
<set>
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender}
</if>
</set>
</update> <!-- 针对set的trim转换 -->
<update id="updatePerson2">
update person
<trim prefix="set" suffixOverrides=",">
<if test="name != null">
NAME = #{name},
</if>
<if test="gender != null">
GENDER = #{gender}
</if>
</trim>
</update> <!-- choose when otherwise -->
<select id="selectPersonExt" parameterType="psn" resultMap="personResultMap">
select * from person
<where>
<choose>
<when test="name!=null">
NAME = #{name}
</when>
<when test="gender!=null">
GENDER = #{gender}
</when>
<otherwise>
IF_IT = #{ifIT}
</otherwise>
</choose>
</where>
</select> <!-- foreach -->
<select id="selectForeachAge" resultMap="personResultMap">
select * from person where age in
<foreach collection="list" item="age" index="i" open="(" close=")" separator=",">
#{age}
</foreach>
</select> </mapper>
最后测试
package com.mmm.test; import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test; import com.mmm.mapper.PersonMapper;
import com.mmm.pojo.Person; public class TestDB { static PersonMapper mapper; static {
//直接实例SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//MyBatis配置文件路径
String path = "mybatis-config.xml";
//通过路径获取输入流
Reader reader = null;
try {
reader = Resources.getResourceAsReader(path);
} catch (IOException e) {
e.printStackTrace();
}
//通过reader构建sessionFactory
SqlSessionFactory sessionFactory = builder.build(reader);
//获取SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
//获取Mapper实例
mapper = sqlSession.getMapper(PersonMapper.class);
} @Test
public void testSelect() throws Exception {
Person p = new Person();
//p.setAge(11);
//p.setGender("男");
List<Person> list = mapper.selectPerson2(p);
for(Person psn:list) {
System.out.println(psn);
}
} @Test
public void testUpdate() throws Exception {
Person p = new Person();
p.setId(10001);
//p.setName("小改2");
//p.setGender("男");
mapper.updatePerson2(p);
List<Person> list = mapper.selectAll();
for(Person psn:list) {
System.out.println(psn);
} } @Test
public void testSelectExt() throws Exception {
Person p1 = new Person();
//p1.setName("小红");
//p.setGender("男");
p1.setIfIT("是");
List<Person> list = mapper.selectPersonExt(p1);
for(Person psn:list) {
System.out.println(psn);
} } @Test
public void testSelectForeachAge() throws Exception {
List<Integer> ageList = new ArrayList<Integer>();
ageList.add(21);
ageList.add(25);
ageList.add(36);
List<Person> list = mapper.selectForeachAge(ageList);
for(Person psn:list) {
System.out.println(psn);
} }
}
小结
以上即为MyBatis动态SQL的内容,在测试类中可以各种尝试改变各种输入值,来查看效果,文中虽然每个元素都涉及到了,但是有些地方还存在不足,并未过多深入扩展,例如最后的foreach,我们的参数不一定是单个,而且也不一定是集合,这些情况我们都该怎么处理,按自己的需要再去深入学习和了解,往往很快会有深刻印象。一个问题与方法的先后问题,当遇到问题后,顺着问题去找方法之后,往往很好记住。反之,没有问题和应用场景,单纯的学习方法和理论效果应该会逊色一些。最后首要还是把这些基础的东西搞懂,再去慢慢延伸。
SSM框架开发web项目系列(四) MyBatis之快速掌握动态SQL的更多相关文章
- SSM框架开发web项目系列(二) MyBatis真正的力量
前言 上篇SSM框架环境搭建篇,演示了我们进行web开发必不可少的一些配置和准备工作,如果这方面还有疑问的地方,可以先参考上一篇“SSM框架开发web项目系列(一) 环境搭建篇”.本文主要介绍MyBa ...
- SSM框架开发web项目系列(三) MyBatis之resultMap及关联映射
前言 在上篇MyBatis基础篇中我们独立使用MyBatis构建了一个简单的数据库访问程序,可以实现单表的基本增删改查等操作,通过该实例我们可以初步了解MyBatis操作数据库需要的一些组成部分(配置 ...
- SSM框架开发web项目系列(五) Spring集成MyBatis
前言 在前面的MyBatis部分内容中,我们已经可以独立的基于MyBatis构建一个数据库访问层应用,但是在实际的项目开发中,我们的程序不会这么简单,层次也更加复杂,除了这里说到的持久层,还有业务逻辑 ...
- SSM框架开发web项目系列(一) 环境搭建篇
前言 开发环境:Eclipse Mars + Maven + JDK 1.7 + Tomcat 7 + MySQL 主要框架:Spring + Spring MVC + Mybatis 目的:快速上手 ...
- SSM框架开发web项目系列(六) SpringMVC入门
前言 我们最初的javaSE部分学习后,基本算是入门了,也熟悉了Java的语法和一些常用API,然后再深入到数据库操作.WEB程序开发,渐渐会接触到JDBC.Servlet/Jsp之类的知识,期间可能 ...
- SSM框架开发web项目系列(七) SpringMVC请求接收
前言 在上篇Spring MVC入门篇中,我们初步了解了Spring MVC开发的基本搭建过程,本文将针对实际开发过程的着重点Controller部分,将常用的知识点罗列出来,并配以示例.在这之前,我 ...
- 使用Eclipse开发Web项目(JSP)——简单登录、无sql
1.使用Eclipse开发Web项目(JSP) tomcat 2.在Eclipse中创建的Web项目: 浏览器可以直接访问webContent中的文件 例如http://localhost:8080/ ...
- ssm框架下web项目,web.xml配置文件的作用
1. web.xml中配置了CharacterEncodingFilter,配置这个是拦截所有的资源并设置好编号格式. encoding设置成utf-8就相当于request.setCharacter ...
- idea开发web项目框架失效和无法启动问题
不会配置idea的javaweb环境的小伙伴可以点击此链接 idea最新版,配置javaweb环境 很多小伙伴用idea开发web项目可能会出现所有代码都写对了但是无论如何都没法运行的情况,eclip ...
随机推荐
- kafka学习笔记2:生产者
这次的笔记主要记录一下kafka的生产者的使用和一些重要的参数. 文中主要截图均来自kafka权威指南 主要涉及到两个类KafkaProducer和ProducerRecord. 总览 生产者的主要架 ...
- RobotFramework自动化测试环境配置
现在工作是做自动化测试平台维护的,平台用的C#做的,主要是用来测试CMBRun项目,它是c/s结构的项目,而b/s结构的项目主要使用RF+Python来做.做这块之前听过自动化测试,身边的朋友也有做这 ...
- CentOS配置上网
CentOS设置: 进入CentOS命令模式: Centos7更改默认启动桌面(或命令行)模式 vi /etc/inittab:查看启动文件,在该文件中存在两种方式: multi-user.tar ...
- MSSQL-并发控制-1-Transaction
MSSQL并发控制原先打算分为两个部分写:隔离级别及锁,写的过程中,发现需要提及下事务的相关内容,故加多一篇博文,共3篇. 如果转载,请注明博文来源: www.cnblogs ...
- Chapter 8: Exceptional Control Flow
概述: 我们可以用一种“流”的概念来理解处理器的工作流程,PC(Program Counter)依次为a0,a1,a2,...,an-1,这个序列可以称作control flow.当然我们并不总是按顺 ...
- 搭建php环境的几种方法
对于想学习php开发初学者来说,先要学习搭建php开发环境,因为要做php开发,搭建一个能够运行php网站的服务器环境是第一步,传统的php环境软件非常复杂,好在很多公司开发了一键搭建php安装环境, ...
- PendingIntent、Notification常用方法
PendingIntent PendingIntent它的直译是:待处理意图,这样翻译,大家就猜出它的作用是什么了,用于处理一些定义但是不立即使用的意图,最常见的就是用户点击通知,然后跳转指定的页面: ...
- LCD显示GPS时钟[嵌入式系统]
夏任务102:做一个GPS钟 实验要求 用RPi的串口连接一个GPS模块,从GPS得到实时时间,在7段数码管或LCD上显示 实验工具: Raspberry Pi Model B主机, 8G c10 S ...
- 原型模式(Prototype)
原型模式(Prototype) 原型模式虽然是创建型的模式,但是与工程模式没有关系,从名字即可看出,该模式的思想就是将一个对象作为原型,对其进行复制.克隆,产生一个和原对象类似的新对象.本小结会通过对 ...
- Linux服务器制定mysql数据库备份的计划任务
首先,创建一个shell脚本: Shell #!/bin/bash mysql_pwd="1234567890" mysql_dump="/usr/local/mysql ...