Mybatis掌握第二章—进阶

目录:

配置之属性优化
1,环境配置environments
2,属性(properties)
3,typeAliases优化
4,设置
5,映射器(Mapper)
ResultMap结果集映射
分页的几种方式
1,日志工厂,
2,Log4j讲解
3,Limit实现分页
Mybatis执行流程剖析

配置之属性优化

xml配置文件,见官方文档
在这里插入图片描述
configuration(配置)
properties(属性)*
settings(设置)*
typeAliases(类型别名)*
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)*
environment(环境变量)*
transactionManager(事务管理器)*
dataSource(数据源)*
databaseIdProvider(数据库厂商标识)
mappers(映射器)*
1,环境配置environments
Mybatis可以配置成适应多种环境,但每个SqlSessionFactory实例只能选择一种环境。default改变就可以
在这里插入图片描述
学会使用配置多套运行环境
Mybatis默认的事务管理器是JDBC
连接池是POOLED,
2,属性(properties)
我们可以通过properties属性来实现引用配置文件
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置
编写一个配置文件
db.properties

driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mybatistest?useSSL=true&serverTimezone=UTC&useUnicode=true&characterEncoding=utf8"
username="root"
password="root"

在核心配置文件中引入

<configuration>
   <!--导入properties文件-->
   <properties resource="db.properties"/>

   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC"/>
           <dataSource type="POOLED">
               <property name="driver" value="${driver}"/>
               <property name="url" value="${url}"/>
               <property name="username" value="${username}"/>
               <property name="password" value="${password}"/>
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <mapper resource="mapper/UserMapper.xml"/>
   </mappers>
</configuration>

3,typeAliases优化
类型别名是为 Java 类型设置一个短的名字。它只和 XML 配置有关,存在的意义仅在于用来减少类完全限定名的冗余。

<!--配置别名,注意顺序-->
<typeAliases>
   <typeAlias type="com.pojo.User" alias="User"/>
</typeAliases>

也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean,他会取这个默认别名班委这个类的类名,首字母小写比如:

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

4,设置
设置(settings)相关 => 查看帮助文档
懒加载
日志实现
缓存开启关闭

5,映射器(Mapper)
MapperRefistry:注册绑定Mapper文件:
方式一:

<!--每一个Mapper.xml都要在Mybatis核心配置文件中注册-->
    <mappers>
        <mapper resource="dao/UserMapper.xml"/>
    </mappers>

方式二:使用class文件绑定注册

<!--每一个Mapper.xml都要在Mybatis核心配置文件中注册-->
    <mappers>
        <mapper class="dao.UserMapper"/>
    </mappers>

注意点:
接口和他的Mapper配置文件必须同名
接口和他的Mapper配置文件必须 同一个包下面
方式三:

<mappers>
        <package name="dao"/>
    </mappers>

注意点和class一样。

ResultMap结果集映射
要解决的问题:属性名和字段名不一致

环境:新建一个项目,将之前的项目拷贝过来

public class User {

   private int id;  //id
   private String name;   //姓名
   private String password;   //密码和数据库不一样!
   
   //构造
   //set/get
   //toString()
}

在这里插入图片描述
方案一:为列名指定别名 , 别名和java实体类的属性名一致

<select id="selectUserById" resultType="User">
  select id , name , pwd as password from user where id = #{id}
</select>

方案二:使用结果集映射->ResultMap 【推荐】

 <resultMap id="UserMap" type="pojo.User">
        <!--column数据库中的字段,poperty实体类中的属性-->
        <result column="pwd" property="password"/>
        <result column="id" property="id"/>
        <result column="name" property="name"/>
    </resultMap>
    <select id="getUserID" resultMap="UserMap">
        select * from user where id=#{id}
    </select>

分页的几种方式

日志工厂
如果一个数据库操作,出现了异常,我们需要排除错误,日志就是最好的助手
Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具(setting中):
在这里插入图片描述
SLF4J
Apache Commons Logging
Log4j 2
Log4j 【掌握】
JDK logging
STDOUT_LOGGING 【掌握】
NO_LOGGING

在Mybatis中具体使用哪一个日志实现,在设置中设定
STDOUT_LOGGING 标准日志,直接用
核心配置文件中添加:
(生怕读者不知道核心配置文件顺序,人家是有顺序的!!!)
在这里插入图片描述

<settings>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

用其他的在value中改变值:

Log4j日志讲解

简介:

  • Log4j是Apache的一个开源项目
  • 通过使用Log4j,我们可以控制日志信息输送的目的地:控制台,文本,GUI组件…
  • 我们也可以控制每一条日志的输出格式;
  • 通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
  • 可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
    使用步骤:
    1、导入log4j的包
<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>

2,配置文件编写log4j.properties,网络上都是大同小异,这些就够用了

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file

#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n

#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/qinqin .log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n

#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

3,peizhi wei log4j为日志实现

<settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>

4,直接测试运行,测试类test运行
在这里插入图片描述
简单实用:
1,在要实用日志的类中Log4j的类中,导入包
import org.apache.log4j.Logger;
不要导错了。

2在要输出日志的类中加入相关的语句
定义属性:

 static Logger logger = Logger.getLogger(UserDaoTest.class);//UserDaoTest为相关的类

3,日志对象,参数为当前类的class
代码:

 @Test
    public void log4jtest(){
        logger.info("info:进入了testlof4j");
        logger.debug("debaug进入了");
        logger.error("error进入了");
    }
 @Test
    public void getUserID(){
        SqlSession session = MybatisUtils.getSession();
        logger.info("测试进入getUserID方法成功");
        UserMapper mapper = session.getMapper(UserMapper.class);
        User userID = mapper.getUserID(2);
        System.out.println(userID);
    }

在这里插入图片描述
Limit实现分页
减少数据的处理量

#语法
SELECT * FROM table LIMIT stratIndex,pageSize

SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15  

#为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:   
SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.  

#如果只给定一个参数,它表示返回最大的记录行数目:   
SELECT * FROM table LIMIT 5; //检索前 5 个记录行  

#换句话说,LIMIT n 等价于 LIMIT 0,n。

步骤:
1,Mapper接口,参数为map

 //分页
    List getUserLimit(Map<String,Integer> map);

2,修改Mapper文件,resultMap 可以不要,看了上面就知道是什么

<resultMap id="UserMap" type="pojo.User">
        <!--column数据库中的字段,poperty实体类中的属性-->
        <result column="pwd" property="password"/>
        <result column="id" property="id"/>
        <result column="name" property="name"/>
    </resultMap>
    <!--分页-->
    <select id="getUserLimit" resultMap="UserMap" parameterType="map">
        select *from user limit #{startIndex},#{pageSize}
    </select>

3,在测试类中传入参数测试
推断:起始位置 = (当前页面 - 1 ) * 页面大小

 @Test
    public void getUserLimit(){
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        HashMap<String, Integer> stringIntegerHashMap = new HashMap<String, Integer>();
        stringIntegerHashMap.put("startIndex",0);
        stringIntegerHashMap.put("pageSize",2);
        List<User> userLimit = mapper.getUserLimit(stringIntegerHashMap);
        for (User user : userLimit) {
            System.out.println(user);

        }
    }

Mybatis执行流程剖析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值