数据库连接池:是一个容器,负责分配,管理数据库连接,允许应用程序重复使用
一个现有的数据库连接,而不是再重新建立一个,释放空闲时间超过最大空闲时间的
连接,来避免因为没有释放连接而引起的数据库连接遗漏。SpringBoot默认使用Hikari技术。
切换连接池,引入依赖即可。
lombok:一个Java类库,通过注解的形式自动生成构造器,getter/setter,equals等方法,并可以
自动化生成日志变量,简化Java开发,提高效率。
删除操作:
@Delete("delete from j_book where id=#{id}") public void delete(Integer id);
使用预编译SQL性能更高:MySQL流程一般是SQL语法解析检查->优化SQL->编译SQL->执行SQL(前
三步在缓存中,执行SQL语句首先到缓存中检查,如果没有编译过,还是得执行前3步。采用预编译,缓存中拿到直接执行)。
更安全(防止SQL注入)
#{}在Mybatis中执行SQL时,会将#{..}替换为?,生成预编译sql,自动设置参数值(参数传递,都使
用#{..}。)
${}拼接SQL,直接将参数拼接在SQL语句中,存在SQL注入问题(如果对表名,列名进行动态
设置时使用。)
数据封装:实体类属性名和数据库表查询返回的字段名一致,mybatis会自动封装。如果不一致,
不能自动封装。
解决方案:1.给字段起别名,让别名与实体类属性一致:例如(create_time createTime)
2.通过@Results,@Rusult注解手动映射封装
例如:
@Results({ @Result(column = "dept_id",property = "deptId") })
3.开启Mybatis的驼峰命名自动映射开关 (建议使用这个)
mybatis.configuration.map-underscore-to-camel-case=true
XML映射文件:
映射文件的名称和Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下。
映射文件中的namespace属性为Mapper接口全限定名一致。
映射文件中SQL语句的id和Mapper接口中的方法名一致,并保持返回类型一致。
动态sql:
查询
<?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.example.mybatis.mapper.UserMapper"> <!--rusultType:单条记录所封装的类型--> <select id="listselect" resultType="com.example.mybatis.pojo.User"> select * from j_book <where> <if test="bookName !=null"> bookName like concat('%',#{bookName},'%') </if> <if test="bookTypeId!=null"> and bookTypeId=#{bookTypeId} </if> </where> </select> </mapper>
更新 <update id="updatedemo"> update j_book <set> <if test="bookName!=null">bookName=#{bookName}, </if> <if test="author!=null">author=#{author}</if> </set> where id=#{id} </update>
删除
<foreach>标签:
collection:遍历的集合
item:遍历出来的元素
separator:分隔符
open:遍历开始前拼接的sql片段
close:遍历结束后拼接的sql片段
<delete id="deletes"> delete from j_book where id in <foreach collection="ids" item="id" separator="," open="(" close=")"> #{id} </foreach> </delete>
sql&include,sql抽取语句,include引用
<sql id="comselect">select id, bookName,author,sex,price,bookTypeId,bookDesc,bookNumber,image from j_book</sql>
<select id="listselect" resultType="com.example.mybatis.pojo.User"> <include refid="comselect"></include> <where> <if test="bookName !=null"> bookName like concat('%',#{bookName},'%') </if> <if test="bookTypeId!=null"> and bookTypeId=#{bookTypeId} </if> </where> </select>