九.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 中
3.1.2 接口中方法名和mapper.xml 标签的id 属性相同
3.2 在mybatis.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
select * from log
5.多参数实现办法
5.1 在接口中声明方法
List
selByAccInAccout(String accin,String accout);
5.2 在mapper.xml 中添加
5.2.1 #{}中使用0,1,2 或param1,param2
select * from log where accin=#{0} and accout=#{1}
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(“内容”)参数中内容
select * from log where accin=#{accin} and accout=#{accout}
十三.动态sql
1. 根据不同的条件需要执行不同的SQL 命令.称为动态SQL
2. MyBatis 中动态SQL 在mapper.xml 中添加逻辑判断等.
3.标签
3.1
select * from log where 1=1
and accin=#{accin}
and accout=#{accout}
3.2
3.2.1 当编写where 标签时,如果内容中第一个是and 去掉第一个and
3.2.2 如果
3.2.3 比直接使用
select * from log
and accin=#{accin}
3.3
3.3.1 只要有一个成立,其它都不执行
select * from log
and accin=#{accin}
and accout=#{accout}
3.4
3.4.1 用在修改SQL 中set 从句
3.4.2 作用1:去掉最后一个逗号 作用2:如果
id=#{id} 目的防止
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 适用:模糊查询、在原内容前或后添加内容
#{money}
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 每次循环时,元素之间的分隔符
select * from log where id in
#{abc}
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();