一、MyBatis的概念
MyBatis是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis避免了几乎所有的JDBC代码和手工设置参数以及抽取结果集。MyBatis使用简单的 XML或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。二、MyBatis的简单实现Demo
1、前期准备工作:
准备mysql-connector-java.jar、mybatis-3.2.7.jar、log4j.jar 这三个必要的开发包,在mysql数据库中新建一张t_user表有id username password email 四个字段
create table t_user(id int not null AUTO_INCREAMENT,
username varchar(45) null,
password varchar(45) null,
email varchar(45) null,
primary key(id));
2、编写数据库表对应的实体类:
package com.mybatis.domain;
public class User{
private Integer id;
private String username;
private String password;
private String email;
....set和get方法.....
}
3、编写数据库表操作的接口
package com.mybatis.dao;
import com.mybatis.domain.User;
import java.util.List;
public interface UserDaoMapper{
public List<User> getAllUser();/*得到所有的User*/
public User getUserById(Integer id);/*根据Id得到一个User*/
public void addUser(User user);/*添加一个User*/
public void deleteUser(Integer id);/*根据id删除一个User*/
}
4、编写接口对应的映射文件xml,命名为UserDaoMapper.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.mybatis.dao.UserMapper">
<!-- 这里定义一个复杂的结果类型可供后面查询语句select中的resultMap 使用,这里由于我们使用了构造函数,所以不需要使用jdbcType来指定类型-->
<resultMap type="User" id="usermap">
<result property="id" column="id" />
<result property="username" column="username"/>
<result property="password" column="password" />
<result property="email" column="email" />
</resultMap>
<select id="getAllUser" resultType="User">
select * from t_user
</select>
<!-- 根据Id得到一个User -->
<select id="getUserById" parameterType="Integer" resultType="User">
select * from t_user where id=#{id}
</select>
<!-- 添加用户 -->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyColumn="id">
insert into t_user(username,password,email) values(#{username},#{password},#{email})
</insert>
<!-- 根据id删除一个用户 -->
<delete id="deleteUser" parameterType="Integer">
delete from t_user where id=#{id}
</delete>
</mapper>
5、编写mybatis的配置文件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>
<!-- 这里是一个全局配置,可以设置各种属性,如懒加载、使用缓存 -->
<settings>
<setting name="lazyLoadingEnabled" value="false" />
<setting name="cacheEnabled" value="true" />
</settings>
<!-- 这里是可以为类设置别名,这样就可以在引用时可以不写类的全路径 -->
<typeAliases>
<typeAlias alias="User" type="com.mybatis.domain.User" />
<typeAlias alias="UserDaoMapper" type="com.mybatis.dao.UserDaoMapper" />
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mybaits" /><!-- 数据库名为mybaits -->
<property name="username" value="root" /><!--用户名 -->
<property name="password" value="root" /><!-- 密码-->
</dataSource>
</environment>
</environments>
<!-- 这里配置一些使用sql查询语句的xml文件,而其中mapper有class,resource,url三种属性-->
<mappers>
<mapper resource="com/mybatis/dao/UserMapper.xml" />
</mappers>
</configuration>
6、编写一个测试类
package com.mybatis.test;
import com.mybatis.domain.User;
public class UserDaoMapperTest{
public static void main(String[] args) {
String resource="mybatis-config.xml";
InputStream input=Resources.getResourceAsStream(resource);/*加载配置文件*/
SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(input);/*构建sqlSession工厂*/
SqlSession session=ssf.openSession();/*拿到一个session*/
UserDaoMapper userDaoMapper=session.getMapper(UserDaoMapper.class);/*拿到接口并进行初始化*/
User user=userDaoMapper.getUserById(1);
}
}
三、spring整合mybatis
1、spring整合mybatis时候,除了要保留来的mybatis开发包以外,我们还需要加入spring的开发包,特别是注意要加入mybatis-spring.jar的整合包。2、我们在MyBatis的简单实现Demo上进行整合。这里我们要保持User,UserDaoMapper,UserDaoMapper.xml这三个文件不变,去掉mybatis-config.xml文件,加入一个spring
的配置文件bean.xml。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.0.xsd">
<!-- 1. 数据源 : DriverManagerDataSource -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybaits"/><!-- 数据库名为mybaits -->
<property name="username" value="root"/><!-- 用户名 -->
<property name="password" value="root"/><!-- 密码 -->
</bean>
<!-- 2. mybatis的SqlSession的工厂: SqlSessionFactoryBean dataSource / typeAliasesPackage-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 扫描与数据库对应的实体类 -->
<property name="typeAliasesPackage" value="com.mybatis.domain"/>
</bean>
<!-- 3. mybatis自动扫描加载Sql映射文件 : MapperScannerConfigurer sqlSessionFactory / basePackage-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 这里的value是指的是放映射文件的包 ,这个property是必须的-->
<property name="basePackage" value="com.mybatis.dao"/>
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
<!-- 4. 事务管理 : DataSourceTransactionManager -->
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 5. 使用声明式事务 -->
<tx:annotation-driven transaction-manager="txManager" />
</beans>
3、编写一个junit测试类,这里用到了spring框架自带的测试框架
//这里用的是spring自带的一个测试框架
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/beans.xml")
public class spring_mybatis_Test{
@Autowired
private UserDaoMapper userDaoMapper;
@Test
public void findAllUser(){
List<User> users=userDaoMapper.getAllUser();
for (User user :users ) {
System.out.println(user);
}
}
}