MyBatis初体验

MyBatis初体验

1. MyBatis的基本构成

1)SqlSessionFactoryBuilder(构造器),根据配置信息或代码来生成 SqlSessionFactory(工厂接口)
2)SqlSessionFactory:来生成SqlSession
3)SqlSession:a.获取映射器,让映射器通过命名空间和方法名称找到对应的SQl,执行SQL并返回结果
              b.直接通过命名信息去执行SQL返回结果
4)SQLMapper(映射器):由Java接口和XML(或注解)共同组成

 1.1 mybatis-config.xml配置文件

<?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>
<environments default="mybatis">	
	<environment id="mybatis">		
		<!-- 事务管理器 -->
		<transactionManager type="JDBC" />		
		<!-- 连接池 -->
		<dataSource type="POOLED">			
			<!--连接数据库的四个参数  -->
			<property name="driver" value="com.mysql.jdbc.Driver" />
			<property name="url" value="jdbc:mysql://localhost:3306/hibernate" />
			<property name="username" value="root" />
			<property name="password" value="root" />
		</dataSource>
	</environment>		
</environments>	
<!-- Mapper映射文件的路径 -->
<mappers>
	<!-- 使用映射文件 -->
 	<mapper resource="com/qf/mapper/UserMapper.xml" />
 	 
 	<!-- 使用注解 -->
	<!-- <mapper class="com.qf.dao.IUserDao"/> -->
</mappers>
</configuration>  

 1.2 UserMapper.xml映射文件

<?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.qf.dao.IUserDao">

	<resultMap type="com.qf.entity.User" id="user">
		<result column="name" property="username"/>
	</resultMap>

	<select id="getUserById" resultMap="user">
		select * from t_user where id = #{id}
	</select>  
</mapper>   

 1.3 Dao层接口

public interface IUserDao {

/*用注解的方式建立映射
@Select(value="select * from t_user where id = #{id}")
@Results(value={
		//多个时用逗号隔开
		@Result(column="name",property="username")			
})*/

public User getUserById(Integer id);	
}  

 1.4 构建SqlSessionFactory、SqlSession

public void getUserById() {
	
	//1.创建SqlSessionFactoryBuilder
	SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
	
	/*2.利用类加载器将配置文件转成一个流
	 * 构建sessionFactory
	*/
	SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(UserDaoTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml"));
	
	//3.打开一个sqlSession
	SqlSession sqlSession = sessionFactory.openSession();
	
	//4.得到userDao代理类
	IUserDao userDao = sqlSession.getMapper(IUserDao.class);
	
	//5.调用方法
	User user = userDao.getUserById(30);
	System.out.println(user);		
}  

或老方式(ibatis):

public void getUserById2() {
	
	//1.SqlSessionFactoryBuilder
	SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
	
	//2.
	SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(UserDaoTest.class.getClassLoader().getResourceAsStream("mybatis-config.xml"));
	
	//3.
	SqlSession sqlSession = sessionFactory.openSession();
	
	User user = (User)sqlSession.selectOne("com.qf.dao.IUserDao.getUserById", 30);
	System.out.println(user);
	
}	

2. 生命周期

SqlSessionFactoryBuilder:创建好SqlSessionFactory之后,它的使命就完成了
SqlSessionFactory:SqlSessionFactory一旦被创建,就会存在于程序的整个生命周期,也就是只要程序不结束,它就会一直存在,你不会去主动销毁它,因为干嘛要销毁它呢?所以,我们要做的就是不要重复的去创建SqlSessionFactory!利用同步锁可以实现,单例模式很适合这种情况!

public class MyBatisUtils {

	private static SqlSessionFactory sessionFactory = null;

	/供外界调用
	public static SqlSession getSqlSession() {

		initSqlSessionFactory();

		//3.打开一个sqlSession
		SqlSession sqlSession = sessionFactory.openSession();

		return sqlSession;
	}

	private static void initSqlSessionFactory() {
		// 1.创建SqlSessionFactoryBuilder
		SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

		// 2.利用类加载器将配置文件转成一个流 构建sessionFactory
		synchronized (MyBatisUtils.class) {
			if (sessionFactory == null) {
				sessionFactory = sqlSessionFactoryBuilder
					.build(UserDaoTest.class.getClassLoader()
							.getResourceAsStream("mybatis-config.xml"));
			}
		}
	}
}  

SqlSession实例是不能共享的,并且不是现程安全的,所以它的最好的作用域应该是方法体内,或者是一次请求时,即method或者request,也就是说再收到一次Http请求时,就应该创建一次一个SqlSession实例,那么也就是说在每次使用完之后我们都需要把它关闭,即调用close().

SqlSession sqlSession = sessionFactory.openSession();  
try{  
	//do work		  
}finally{  
session.close();  
}   

3. log4j和工具类

log4j–log for java(java的日志)
主要有三个部分:
第一部分,log4j的属性文件要会改
第二部分,log4j总共有7个级别,重点掌握ERROR>WARN>INFO>DEBUG这四个
第三部分,四个级别的使用,以及分别在什么情况才使用

log.error("这是error级别");// 异常信息就用error  

// log.error("添加用户的时候出错了", e.getEx...);
log.warn("这是警告级别");// 比如判断为空时使用
log.info("这是info级别"); // 记录系统流程的时候使用
log.debug("这是调试级别");// 调试信息时就用debug   

4. 利用MyBatis走一遍简单的单表CRUD

<?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.qf.dao.IUserDao">

	<resultMap type="com.qf.entity.User" id="user">
		<result column="name" property="username"/>
	</resultMap>

	<select id="getUserById" resultMap="user">
		select * from t_user where id = #{id}
	</select>

	<select id="getUserList" resultMap="user">
		select * from t_user
	</select>

	<delete id="deleteUser">
		delete from t_user where id = #{id}
	</delete>

	<insert id="addUser" >
		insert into t_user (name,password) values(#{username},#{password})
	</insert>

	<insert id="updateUser" >
		update t_user set name=#{username},password=#{password} where id=#{id}
	</insert>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值