您的位置:首页 > 其它

2020-08-11 Mybatis重要对象生命周期、ResultMap结果集映射、日志工厂、log4j使用、分页操作、注解实现功能替代XML文件

2020-08-11 23:59 459 查看

生命周期、作用域

SqlSessionFactoryBuilder:只是用来创建SqlSessionFactory,创建完毕后就不需要了

SqlSessionFactory:可以理解为数据库连接池,完整贯穿整个应用运行期间,不可丢弃创建

SqlSession:相当于数据库连接请求,每次需要操作数据库就用一次,用完马上关闭,相当于释放,避免并发问题
而SqlSession每一次连接Mapper,都在处理一个业务

ResultMap结果集映射

专门用于解决数据库字段和属性名不一致的问题。

解决方法一:可以在SQL中直接用别名

解决方法二:在Mapper.xml文件中,直接不用resultType,而使用resultMap

<resultMap id="UserMap" type="User">
<result column="pwd" property="password"/>
</resultMap>

<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>

日志工厂

如果一个数据库操作出现异常,需要排错
问题:怎么打印SQL?

在Settings中可以进行设置,主要有STDOUT_LOGGING标准输出,可以不用配直接使用
另外一个就是LOG4J

<!-- 记住一定要放在properties和typeAliases标签中间,有先后顺序设定的 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>

这个是标准的日志工厂实现

Log4j讲解

上面那个是标准工厂实现,但是Log4j需要导包等步骤

建立log4j.properties文件,然后填入内容

测试类中:
导包:

import org.apache.log4j.Logger;

根据不同的情况,使用其日志打印信息:

public static Logger logger = Logger.getLogger(UserMapper01.class);

@Test
public void test(){
//通过工具类获得sqlsession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> Userlist = userMapper.getUserList();
logger.info(Userlist);
logger.debug(Userlist);
logger.error(Userlist);
for (User user : Userlist) {
System.out.println(user);
}
//关闭sqlsession
sqlSession.close();
}

Limit分页

分页主要是减少数据的处理量
select * from user limit 0,5;

//接口中:
List<User> getUserByLimit(Map<String,Integer> map);
//Mapper.xml中:
<resultMap id="UserMap" type="User">
<result column="pwd" property="password"/>
</resultMap>

<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
//测试方法:
public void getUserBylimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("startIndex",0);
map.put("pageSize",2);
System.out.println(map);
List<User> list = userMapper.getUserByLimit(map);
for(User user : list){
System.out.println(user);
}
sqlSession.close();
}

尤其注重Mapper.xml中的标签名参数:
一)、parameterType代表了参数的类型。它是通过HashMap的形式传入了两个键值对,代表limit方法的下标

二)、resultMap代表返回结果的映射,因为返回结果的类型名和数据库不一样,所以用了ResultMap来映射,UserMap是在UserMapper中配置的ID,注意看

RowBounds分页

是面向对象思想做的,基本不会使用,已淘汰
直接创建RowBounds类,使用方法来进行实现,可以直接点进方法看使用方法

分页插件

Mybatis PageHelper

使用注解执行整个查询过程

@select(“select * from user”)
这里底层主要是使用反射的机制来读取接口的方法、参数、执行体等等,这样就做完了全部功能
但是使用注解,对于参数、返回值等操作就很会很麻烦,复杂的SQL语句还是要用XML配置文件来使用
记得一定要在核心配置文件中进行配置

<mappers>
<mapper resource="com/wang/Dao/UserMapper.xml"/>
</mappers>

<mappers>
<mapper class="com.wang.Dao.UserMapper"/>
</mappers>

静态代理/动态代理

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: