Mybatis快速入门
1.mybatis认识
1.1概念:是一个ORM的数据库持久化框架(java的持久层框架)
ORM:对象关系映射
数据库持久化:将数据保存到数据库的过程
mybatis是一个支撑框架,它是以映射SQL语句orm方式来做数据库持久化操作
2.为什么要用mybatis
mybatis较与jdbc的优势
jdbc:重复代码比较多,封装对象比较麻烦,没有性能控制,
如果要提高效率,需要自己写缓存
mybatis的优势:
没有太多的重复代码,封装对象(不用手动处理参数)
-->select User对象
性能控制 缓存
SQL统一管理,维护比较方便(把SQL从代码中抽取出来)
3.使用mybatis
3.1导包
``
这是我导的包,可以参考一下
3.2写配置文件
<?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>
<!--引入jdbc.propeties文件-->
<properties resource="jdbc.properties" />
<typeAliases>
<!--
配置单独的类
<typeAlias type="cn.hx.domain.User" alias="User"></typeAlias>
-->
<!--配置包 这个常用-->
<package name="cn.hx.domain"></package>
<package name="cn.hx.query"></package>
</typeAliases>
<!-- 环境们 (很多环境的意思)
default:默认使用哪一个环境(必需对应一个环境的id)-->
<environments default="development">
<!--一个环境 id:为这个环境取唯一一个id名称-->
<environment id="development">
<!--事务管理 type:JDBC(支持事务)/MANAGED(什么都不做)-->
<transactionManager type="JDBC" />
<!-- 数据源, 连接池 type(POOLED):MyBatis自带的连接池 -->
<dataSource type="POOLED">
<!-- 连接数据库的参数 -->
<property name="driver" value="${jdbc.driverClassName}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</dataSource>
</environment>
</environments>
<!-- 这个mappers代表的是相应的ORM映射文件 -->
<mappers>
<mapper resource="cn/hx/domain/UserMapper.xml" />
</mappers>
</configuration>
3.3引入配置
//调用配置中的方法
Reader reader = Resources.getResourceAsReader("MyBatis-Config.xml");
//获取到SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
3.4获取到sqlSession
//通过sqlSessionFactory获取到sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
4.这里是一个完成查询所有的案例
配置文件
<?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">
<!-- orm框架 sql的映射
namespace:命名空间 namespace路径+ id值
namespace怎么配置 包名.接口名 + queryAll
-->
<mapper namespace="cn.hx.dao.IUserDao">
<!-- 查询 queryAll()
resultType 返回类型
-->
<select id="queryAll" resultType="User">
select * from t_user
</select>
<select id="queryOne" parameterType="long" resultType="User">
select * from t_user where id=#{id}
</select>
<insert id="save" parameterType="User"
useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into t_user(name) value(#{name})
</insert>
<delete id="delete" parameterType="User" >
delete from t_user where id=#{id}
</delete>
<!--批量删除-->
<delete id="deleteBatch" parameterType="list">
delete from t_user where id in
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</delete>
<!--批量新增-->
<insert id="saveBatch" parameterType="list">
insert into t_user(name) values
<foreach collection="list" item="user" separator="," >
(#{user.name})
</foreach>
</insert>
<!--高级查询-->
<select id="queryList" resultType="User">
select * from t_user
<where>
<if test="name!=null">
and name like #{name}
</if>
<if test="age!=null">
and age like #{age}
</if>
</where>
</select>
<update id="update" parameterType="long" >
update t_user set name = #{name} where id = #{id}
</update>
</mapper>
//这是实现类里面的方法
@Override
public User queryOne(Long id) throws IOException {
//调用配置中的方法
Reader reader = Resources.getResourceAsReader("MyBatis-Config.xml");
//获取到SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
//通过sqlSessionFactory获取到sqlSession
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("cn.hx.dao.IUserDao.queryOne", id);
return user;
}
//测试
@Test
public void test1() throws Exception{
List<User> users = new UserDaoImpl().queryAll();
users.forEach(e-> System.out.println(e));
}
5.细节
有很多细节需要注意 例如:
5.1主键
有些时候在保存数据的时候需要拿到主键,做一些操作
配置如下几个属性就能完成
useGeneratedKeys=**"true"**
keyColumn=**"id"**
keyProperty=**"id"**
5.1日志log4j
作用:通过日志,把信息打印出来,便于查看
使用同样需要导包写配置 导包以前面mybatis的为准,我是一起测试的
配置如下
# 日志输出级别 输出到控制
log4j.rootLogger=ERROR, stdout
#log4j.rootLogger=NONE
log4j.logger.cn.hx=TRACE
# 输出到控制台的配置信息
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
# 输出到控制台的 格式类
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
剩余的批量操作与高级查询根据MyBatis的配置进行参考,其实都是大同小异,这里就不在做介绍了