Mybatis笔记(二)

九.MyBatis 实现新增

功能:从应用程序角度出发,软件具有哪些功能.

业务:完成功能时的逻辑.对应Service 中一个方法

事务:从数据库角度出发,完成业务时需要执行的SQL 集合,统称一个事务.

1.在mapper.xml 中提供标签,标签没有返回值类型

    insert into people values(default,#{name},#{age})

2.通过session.insert()调用新增方法

int index1 = session.insert("a.b.ins", p);

if(index1>0){

    System.out.println("成功");

}else{

    System.out.println("失败");

}

十.MyBatis 实现修改

1. 在mapper.xml 中提供标签

    update people set name = #{name} where id = #{id}

2.编写代码

People peo = new People();

peo.setId(3);

peo.setName("王五");

int index = session.update("a.b.upd", peo);

if(index>0){

    System.out.println("成功");

}else{

    System.out.println("失败");

}

session.commit();

十一.mybatis 实现删除

1. 在mapper.xml 提供标签

    delete from people where id = #{0}

2. 编写代码

int del = session.delete("a.b.del",3);

if(del>0){

    System.out.println("成功");

}else{

    System.out.println("失败");

}

session.commit();

十二.MyBatis 接口绑定方案及多参数传递

1.作用:实现创建一个接口后把mapper.xml 由mybatis 生成接口的实现类,通过调用接口对象就可以获取mapper.xml 中编写的sql.

2.后面mybatis 和spring 整合时使用的是这个方案.

3.实现步骤:

3.1 创建一个接口

    3.1.1 接口包名和接口名与mapper.xml 中namespace相同

 3.1.2 接口中方法名和mapper.xml 标签的id 属性相同

3.2 在mybatis.xml 中使用进行扫描接口和mapper.xml

4.代码实现步骤:

 4.1 在mybatis.xml 中下使用

    

    4.2 在com.bjsxt.mapper 下新建接口

public interface LogMapper {

    List selAll();

}

 4.3 在com.bjsxt.mapper 新建一个LogMapper.xml

4.3.1 namespace 必须和接口全限定路径(包名+类名)一致

4.3.2 id 值必须和接口中方法名相同

4.3.3 如果接口中方法为多个参数,可以省略parameterType

    

5.多参数实现办法

5.1 在接口中声明方法

List selByAccInAccout(String accin,String accout);

    5.2 在mapper.xml 中添加

  5.2.1 #{}中使用0,1,2 或param1,param2

6.可以使用注解方式

    6.1 在接口中声明方法(mybatis 把参数转换为map 了,其中@Param("key") 参数内 容就是map 的value)

List selByAccInAccout(@Param("accin") Stringaccin123,@Param("accout") String accout3454235);

    6.2 在mapper.xml 中添加

        6.2.1 #{} 里面写@Param(“内容”)参数中内容

十三.动态sql

1. 根据不同的条件需要执行不同的SQL 命令.称为动态SQL

2. MyBatis 中动态SQL 在mapper.xml 中添加逻辑判断等.

3.标签

3.1  

3.2 

3.2.1 当编写where 标签时,如果内容中第一个是and 去掉第一个and

3.2.2 如果中有内容会生成where 关键字,如果没有内容不生成where 关键字

3.2.3 比直接使用少写where 1=1

3.3 

3.3.1 只要有一个成立,其它都不执行

3.4 

3.4.1 用在修改SQL 中set 从句

3.4.2 作用1:去掉最后一个逗号 作用2:如果里面有内容生成set 关键字,没有就不生成

id=#{id} 目的防止中没有内容,mybatis 不生成set 关键字,如果修改中没有set 从句SQL 语法错误.

    update log

    

        id=#{id},

        

            accin=#{accIn},

        

        

            accout=#{accOut},

        

    

    where id=#{id}

3.5 Trim

3.5.1 prefix 在前面添加内容

3.5.2 prefixOverrides 去掉前面内容

3.5.3 suffix 在后面添加内容

3.5.4 suffixOverrieds 去掉后面内容

3.5.5 执行顺序去掉内容后添加内容

    update log

    

    a=a,

    

    where id=100

3.6 

3.6.1 作用:给参数重新赋值

3.6.2 适用:模糊查询、在原内容前或后添加内容

3.7 

3.7.1 作用:循环参数内容,还具备在内容的前后添加内容,还具备添加分隔符功能。

3.7.2 适用::in 查询中.批量新增中(mybatis 中foreach 效率比较低)

3.7.3 批量新增,SQL 命令

insert into log VALUES

(default,1,2,3),(default,2,3,4),(default,3,4,5)

3.7.3.1 openSession()必须指定 (底层JDBC 的PreparedStatement.addBatch();)

factory.openSession(ExecutorType.BATCH);

3.7.4 示例

3.7.4.1 collectino=”” 要遍历的集合

3.7.4.2 item 迭代变量, #{迭代变量名}获取内容

3.7.4.3 open 循环后左侧添加的内容

3.7.4.4 close 循环后右侧添加的内容

3.7.4.5 separator 每次循环时,元素之间的分隔符

3.8  和

3.8.1 某些SQL 片段如果希望复用,可以使用定义这个片段

    id,accin,accout,money

3.8.2 在

    select

    from log

十四、ThreadLocal

1 线程容器,给线程绑定一个Object 内容,后只要线程不变,可以随时取出

1.1 改变线程,无法取出内容

2 示例

final ThreadLocal threadLocal = new ThreadLocal<>();

threadLocal.set("测试");

new Thread(){

    public void run() {

        String result = threadLocal.get();

        System.out.println("结果:"+result);

    };

}.start();

你可能感兴趣的:(Mybatis笔记(二))