mybatis(2)
1. 注解模式--了解
之前我们使用mybatis完成数据库表操作时,使用的是xml映射文件来完成。 我们也可以使用主键模式完成对表的操作。
dao接口

配置文件

2. mybatis的优化
2.1 添加sql日志文件
我们刚才操作数据库表时,没有再控制台打印sql语句,添加日志文件后,即可再控制台打印sql语句。
<!--log4j日志jar包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
创建日志文件
按照文件中的规则打印。 文件名必须为log4j.properties
log4j.rootLogger=DEBUG, Console
#Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
2.2 把数据源的信息提取到属性文件中
创建一个属性文件db.properties
# user拿到你的计算机名称
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/qy174
user=root
password=root
在配置文件中引入属性文件

3.mybatis处理多个参数

4. mybatis处理特殊字符
第一种: 使用转义符
&(逻辑与) &
<(小于) <
>(大于) >
"(双引号) "
'(单引号) '
<select id="getBySalary" resultType="com.ykq.entity.Student">
select * from tbl_student where salary>#{min} and salary <#{max}
</select>
第二种: 使用
<!--
在xml文件中出现了特殊符号 <.mybatis的解决方案: 转义符。
第二种: 使用CDATA标签。<![CDATA[特殊字符的sql]]>
-->
<select id="getBySalary" resultType="com.ykq.entity.Student">
<![CDATA[select * from tbl_student where salary>#{min} and salary <#{max}]]>
</select>
5. mybatis的添加时返回主键的递增值.
<!--添加
useGeneratedKeys:使用生产的主键值
keyProperty: 把生成的主键值赋给实体类的哪个属性。
-->
<insert id="add" parameterType="com.ykq.entity.Student" useGeneratedKeys="true" keyProperty="id">
insert into tbl_student values(null,#{name},#{sex},#{salary},#{birthday})
</insert>
6. mybatis完成模糊查询
select * from 表名 where 字段名 like "%_"
<!--concat表示数据库中字符串拼接。-->
<select id="getByName" resultType="com.ykq.entity.Student">
select * from tbl_student where name like concat('%',#{name},'%')
</select>
7. mybatis解决列名和属性名不一样
第一种: 为查询的列名起别名 【让别名和属性名一致】

第二种: 使用resultMap标签
作用: 完成列名和属性名之间的映射关系。

8.mybatis的分页插件
select * from 表名 limit 起始记录,没有显示的条数
(page-1)*pageSize
8.1 原理

8.2 如何使用分页插件--PageHelper
引入依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本</version>
</dependency>
配置分页插件拦截器
<!--
plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下:
properties?, settings?,
typeAliases?, typeHandlers?,
objectFactory?,objectWrapperFactory?,
plugins?,
environments?, databaseIdProvider?, mappers?
-->
<plugins>
<!-- com.github.pagehelper为PageHelper类所在包名 -->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!-- 使用下面的方式配置参数,后面会有所有的参数介绍 -->
<property name="param1" value="value1"/>
</plugin>
</plugins>
代码中使用
@Test
public void test01() throws Exception{
InputStream resourceAsStream = Resources.getResourceAsStream("mybatis.xml");
SqlSessionFactory sqlSessionFactory=new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession=sqlSessionFactory.openSession();
//获取接口的代理实现类.
StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
//开启分页int pageNum,页码 int pageSize:每页的记录数.
PageHelper.startPage(3,3);
//查询
List<Student> all = studentDao.getAll();
//把查询的结果封装到PageInfo中.
PageInfo<Student> pageInfo=new PageInfo<>(all);
//验证分页是否成功
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("当前页的记录:"+pageInfo.getList());
}
浙公网安备 33010602011771号