Day_58_Mybatis_02

一、常用标签介绍

1.配置属性

properties(属性)

property

settings(全局配置参数)

setting

typeAliases(类型别名)

typeAliase

package

typeHandlers(类型处理器)

objectFactory(对象工厂)

plugins(插件)

environments(环境集合属性对象)

environment(环境子属性对象)

transactionManager(事务管理)

dataSource(数据源)

mappers(映射器)

mapper

package

① Properties属性

在使用 properties 标签配置时,我们可以采用两种方式指定属性配置。

第一种:

properties>

property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>

property name="jdbc.url" value="jdbc:mysql://localhost:3306/test"/>

property name="jdbc.username" value="root"/>

property name="jdbc.password" value="root"/>

properties>

第二种:

在classpath下创建db.properties文件

jdbc.driver=com.mysql.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/test 

jdbc.username=root

jdbc.password=root

properties  url=  file:///D:/workspace/day02_test/src/db.properties">properties>

此时我们的 dataSource 标签就变成了引用上面的配置

dataSource type="POOLED">

property name="driver" value="${jdbc.driver}"/>

property name="url" value="${jdbc.url}"/>

property name="username" value="${jdbc.username}"/>

property name="password" value="${jdbc.password}"/>

dataSource>

② typeAliases属性

在前面我们讲的 Mybatis 支持的默认别名,我们也可以采用自定义别名方式来开发

在 mybatis-config.xml 中配置:

typeAliases>

typeAlias alias="user" type="com.tledu.zrz.pojo.User"/>

package name="com.tledu.zrz.pojo"/>

package name="其它包"/>

typeAliases>

③ Mappers属性

Mappers使我们所说的映射器,用于通过mybatis配置文件去找到对应的mapper文件

有三种用法

④Resources

使用相对于类路径的资源

如:

⑤class

使用 mapper 接口类路径

如:

注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。

⑥Package

注册指定包下的所有 mapper 接口

如:

注意:此种方法要求 mapper 接口名称和 mapper 映射文件名称相同,且放在同一个目录中。

-------------------------------------------------------------------------------------------------------------------------------------

2.Mapper.xml属性

1.#和$区别

#{}表示一个占位符号

通过#{}可以实现 preparedStatement 向占位符中设置值,自动进行 java 类型和 jdbc 类型转换,

#{}可以有效防止 sql 注入。

举例:select * from user where username = ' ' or 1=1 # and passord=''

#{}可以接收简单类型值或 pojo 属性值。 如果 parameterType 传输单个简单类

型值,#{}括号中可以是 value 或其它名称。

可以自动对值添加 ’ ’ 单引号

${}表示拼接 sql 串

通过${}可以将 parameterType 传入的内容拼接在 sql 中且不进行 jdbc 类型转换, ${}可以接收简

单类型值或 pojo 属性值,如果 parameterType 传输单个简单类型值,${}括号中只能是 value。

比如order by id  这种的,以id排序  那么这个id 是没有单引号的,就是简单的SQL拼接,所以我们应该使用${} 而不是#{}

举例: ALTER TABLE (表名)  ADD  keycode(字段) varchar(500) 

-------------------------------------------------------------------------------------------------------------------------------------

2.parameterType 配置参数

我们在上一章节中已经介绍了 SQL 语句传参,使用标签的 parameterType 属性来设定。该属性的取值可以是基本类型,引用类型(例如:String 类型),还可以是实体类类型(POJO 类)。同时也可以使用实体类的包装类,本章节将介绍如何使用实体类的包装类作为参数传递。

注意事项

基本类型和String我们可以直接写类型名称,也可以使用包名.类名的方式

例如 :

java.lang.String

实体类类型,目前我们只能使用全限定类名。

究其原因,是 mybaits 在加载时已经把常用的数据类型注册了别名,从而我们在使用时可以不写包名,而我们的是实体类并没有注册别名,所以必须写全限定类名。在 mybatis 的官方文档的说明

3.resultType

resultType 属性可以指定结果集的类型,它支持基本类型和实体类类型。

我们在前面的 CRUD 案例中已经对此属性进行过应用了。

需要注意的是,它和 parameterType 一样,如果注册过类型别名的,可以直接使用别名。没有注册过的必须使用全限定类名。

例如:我们的实体类此时必须是全限定类名

同时,当是实体类名称时,还有一个要求,实体类中的属性名称必须和查询语句中的列名保持一致,否则无法实现封装(不区分大小写)

---------------------------------------------------------------------------------------------------------------------------------

4.resultMap

我们在resultType ,提到在声明返回值类型为实体类型之后,实体中的属性必须和查询语句中的属性对应上,但是我们在开发的过程中也难免会遇到无法对应的情况。比如说我们在进行数据库设计的时候,多个单词往往是用_连接,但是在实体类中的属性往往采用小驼峰的方式命名。这就导致字段名无法对应上,这个时候我们就需要配置resultMap来解决这个问题了。

通过resultMap,我们可以指定查询结果字段和实体属性字段的映射关系。

<resultMap id="userResult" type="User">

        <id column="id" property="id" />

         <result property="nickname" column="nickname" />

         <result property="schoolName" column="school_name" />

</resultMap>

三、实现分页查询

分页是展示页面中常见的一种技术,就是把数据在页面分开显示,这样可以提高执行效率和用户的流量

1、分页思想

总条数 totalCount:select count(*) from t_user;

每页条数 pageSize: 3

共有几页 totalPage: totalCount / pageSize + (totalCount % pageSize == 0 ? 0 : 1)

通过分页limit查询参数变化规律 可以 发现

select * from t_user limit 起始值,分页单位

起始值一直在变化 ,而分页单设定好后是不变的

起始值 = (当前页-1)*分页单位

这样我们就可以根据以上规律实现sql的分页查询了

2.在UserMapper.xml中添加分页相关sql

<!-- 获取分页数据 --> <select id="findPageList" resultType="User" parameterType="map"> select * from t_user limit #{pageOffset},#{pageSize} </select> <!-- 获取总条数 --> <select id="getListCount" resultType="int"> select count(*) from t_user; </select>

3.测试

@Test public void test1(){ SqlSession session = MybatisUtil.getSession(); Map<String,Object> map = new HashMap<>(); int cpage = 2; int pageSize = 3; int start = (cpage-1)*pageSize; map.put("start",start); map.put("pageSize",pageSize); List<User> list = session.selectList("User.getList", map); for (User user : list) { System.out.println(user); } session.close(); }

分页插件的使用:

PageHelper是一款犀利的Mybatis分页插件,使用了这个插件之后,分页开发起来更加简单容易。因为是第三方插件,所以需要额外的jar包

配置插件

在mybatis-config.xml中,添加plugins标签配置,表示开启PageHelper插件

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>  

   <settings>      

        <!-- 打开延迟加载的开关 -->      

        <setting name="lazyLoadingEnabled" value="true" />       

       <!-- 将积极加载改为消息加载即按需加载 -->      

        <setting name="aggressiveLazyLoading" value="false"/>      

    </settings>   

    <typeAliases>     

  <package name="com.how2java.pojo"/>  

</typeAliases>   

  <plugins>     

    <plugin interceptor="com.github.pagehelper.PageInterceptor">

</plugin>   

  </plugins>     

    <environments default="development">  .....    

 </environments>  

   <mappers> ...  

   </mappers> </configuration>

 

修改CategoryMapper.xml

limit注释掉,因为分页相关工作,会由PageHelper去做掉,不需要自己去写了

<?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.how2java.pojo">         <select id="listCategory" resultType="Category">       

      select * from   t_category

<!--                 <if test="start!=null and count!=null"> -->

<!--                     limit #{start},#{count} -->

<!--                 </if> -->         </select>         </mapper>

分页查询测试

查询很有意思,只需要在执行查询所有的调用之前,执行一条语句即可:

PageHelper.offsetPage(0, 5);

public class TestMybatis {     public static void main(String[] args) throws IOException, InterruptedException {         String resource = "mybatis-config.xml";         InputStream inputStream = Resources.getResourceAsStream(resource);         SqlSessionFactory sqlSessionFactory = newSqlSessionFactoryBuilder().build(inputStream);         SqlSession session = sqlSessionFactory.openSession();                PageHelper.offsetPage(0, 5);           List<Category> cs = session.selectList("listCategory");         for (Category c : cs) {             System.out.println(c.getName());         }           session.commit();         session.close();     } }

获取总数

public class TestMybatis {     

public static void main(String[] args) throws IOException, InterruptedException {         

String resource = "mybatis-config.xml";         

InputStream inputStream = Resources.getResourceAsStream(resource);         SqlSessionFactory sqlSessionFactory= newSqlSessionFactoryBuilder().build(inputStream);        

 SqlSession session = sqlSessionFactory.openSession();                PageHelper.offsetPage(0, 5);     

      List<Category> cs = session.selectList("listCategory");

        for (Category c : cs) {

            System.out.println(c.getName());

        }

                  PageInfo pageInfo = new PageInfo<>(cs);

        System.out.println("总数:"+pageInfo.getTotal());

        System.out.println(pageInfo);

          session.commit();

        session.close();     } }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值