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处理特殊字符
第一种: 使用转义符

&(逻辑与) &amp;
<(小于) &lt;
>(大于) &gt;
"(双引号) &quot;
'(单引号) &apos;
   <select id="getBySalary" resultType="com.ykq.entity.Student">
        select * from tbl_student where salary>#{min} and salary &lt;#{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());

    }

posted on 2024-12-24 16:52  小木不痞  阅读(16)  评论(0)    收藏  举报

导航