Mybatis的初步学习

»Mybatis

Mybatis是一款优秀的持久层框架

要使用Mybatis需要一个mubatis-x.x.x.jar包,当然还有一些依赖包,例如数据库驱动,日志处理等 。


入门案例:

1.在Ecplise中创建一个JAVA工程,导入mybatis包和mysql连接驱动包。 2.编写jdbc.properties数据库连接配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=317287

3.数据库建表,建一个user表,同时在项目中创建一个User实体类 4.编写主配置文件

<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<properties resource="jdbc.properties"/>
	<!-- 和spring整合后 environments配置将废除    -->
	<environments default="development">
		<environment id="development">
			<!-- 使用jdbc事务管理 -->
			<transactionManager type="JDBC" />
			<!-- 数据库连接池 -->
			<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>
		</environment>
	</environments>
	<!--加载sql映射文件-->
	<mappers>
		<mapper resource="cn/ruanwenjun/sqlmap/UserMapper.xml" />
	</mappers>
</configuration>

5.log4j日志记录文件 log4.properties

# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

6.sql语句映射文件

<?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">
<!-- 写Sql语句   -->
<mapper namespace="test">
	<select id="findUserById" parameterType="Integer" resultType="cn.ruanwenjun.domain.User">
		select * from user where id = #{v}
	</select>
	<select id="addUser" parameterType="cn.ruanwenjun.domain.User" >
		insert into user values(#{id},#{username},#{birthday},#{sex},#{address})
	</select>
	<select id="updateUser" parameterType="cn.ruanwenjun.domain.User" >
		update user set username=#{username},sex=#{sex},address=#{address},birthday=#{birthday} where id =#{id}
	</select>
	<select id="likeSelectUserByUsername" parameterType="String" resultType="cn.ruanwenjun.domain.User">
		select * from user where username like "%"#{v}"%"
	</select>
</mapper>

7.测试代码

public class Demo {
	@Test
	//查找
	public void findUserById() {
		try {
			String resource = "SqlMapConfig.xml";
			InputStream in = Resources.getResourceAsStream(resource);
			SqlSessionFactoryBuilder ssfb = new SqlSessionFactoryBuilder();
			SqlSessionFactory ssf = ssfb.build(in);
			SqlSession session = ssf.openSession();
			User user = session.selectOne("test.findUserById", 1);
			System.out.println(user);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
输出结果正常

SqlSessionFactory

SqlSessionFactory是Mybatis中十分重要的工厂,是一个接口,有两个实现类,每一个基于Mybatis的应用都要依靠SqlSessionFactory,可以从以下方式来构建SqlSessionFactory。

1.从XML配置文件中构建(文档上描述建议将该资源文件放在类路径下,即src下)

String resource = "SqlMapConfig.xml";
InputStream inputStream= Resources.getResourceAsStream(resource);//Resources类是Mybatis自带的一个用于读取资源文件
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

2.通过创建Configuration来构建SqlSessionFactory(不推荐使用)

DataSource dataSource = BlogDataSourceFactory.getBlogDataSource();//这里是得到一个数据库连接池,具体代码没有给出
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration configuration = new Configuration(environment);
configuration.addMapper(BlogMapper.class);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);

sqlSession

也是一个接口,有两个实现类

SqlSession session = sqlSessionFactory.openSession();  //这里得到的是sqlSession的两种实现类

SqlSession包含执行sql命令的方法,还有事务的回滚、提交。

里面还有一个重要的方法getMapper(Class clazz); 现在文档上面似乎是推荐使用mapper来使用

SQL语句映射文件

<?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="cn.ruanwenjun.dao.UserMapper">
    <select id="selectUserByUsername" resultType="cn.ruanwenjun.domain.User" parameterType="string">
		select * from user where username = #{v}
	</select>
</mapper>

有这个配置文件,那么就可以通过session来调用配置文件里的SQL语句

  1. namespace:现在是必须的,建议将这写为mapper接口的类路径
  2. id:写为接口中的方法
  3. resultType:写为方法的返回值类型
  4. parameterType:参数类型

作用域和生命周期