注:原始的Dao开发方法需要程序员写Dao接口和Dao的实现类
mybatis框架
1:SqlMapConfig.xml(是mybatis的全局配置文件,名称不固定的)
配置了数据源、事务等mybatis运行环境
配置映射文件(配置sql语句)
mapper.xml(映射文件)、mapper.xml、mapper.xml.....
2:qlSessionFactory(会话工厂),根据配置文件创建工厂
作用:创建SqlSession
3:SqlSession(会话),是一个接口,面向用户(程序员)的接口
作用:操作数据库(发出sql增、删、改、查)。
4:Executor(执行器),是一个接口(基本执行器、缓存执行器)
作用:SqlSession内部通过执行器操作数据库
5:mapped statement (底层封装对象)作用:对操作数据库存储封装,包括 sql语句,输入参数、输出结果类型
下面就用一个原始的Dao例子操作一遍流程吧
1:添加jar包
asm-3.3.1.jar
cglib-2.2.2.jar
commons-logging-1.1.1.jar
javassist-3.17.1-GA.jar
junit-4.9.jar
log4j-1.2.17.jar
log4j-api-2.0-rc1.jar
log4j-core-2.0-rc1.jar
mybatis-3.2.7.jar
mysql-connector-java-5.1.7-bin.jar
slf4j-api-1.7.5.jar
slf4j-log4j12-1.7.5.jar
2:sqlMapconfig.xml的创建(注意此文件需要添加到src目录下,你也可以建立与src同一级的config目录下)
先建立一个db.properties文件,用来配置数据库的基本信息
(1)db.properties文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
(2)映射文件UserMapper.xml的配置,也就是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="test">
<!-- 在映射文件中配置很多sql语句
#{}表示一个占位符
<!-- 根据用户的id进行单条信息的查询 -->
<select id="findUserById" parameterType="int" resultType="cn.mybatis.pojo.User">
select * from user where id=#{id};
</select>
<!-- 根据用户名进行模糊查询用户的信息,
可能返回多条记录 -->
<select id="findUserName" parameterType="String" resultType="cn.mybatis.pojo.User">
select * from user where username LIKE '%${value}';
</select>
<!-- 添加用户信息
<insert id="insertUser" parameterType="cn.mybatis.pojo.User">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
select LAST_INSERT_ID()
</selectKey>
insert into user(username,birthday,sex,address)
values(#{username},#{birthday},#{sex},#{address})
</insert>
<!-- 删除用户
需要传入用户的id
<delete id="deleteUser" parameterType="java.lang.Integer">
delete from user where id=#{id};
</delete>
<!-- 根据id更新用户一 -->
<update id="updateUser" parameterType="cn.mybatis.pojo.User">
update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address} where id=#{id};
</update>
</mapper>
(3)sqlMapconfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制是由mybatis控制的-->
<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>
<!-- 加载映射文件 -->千万不能忘记此处的映射文件的加载
<mappers>
<mapper resource="sqlmapr/UserMapper.xml"></mapper>
</mappers>
</configuration>
(4) 在SqlMapConfig.xml加载映射文件
在sqlMapConfig.xml中加载mapper.xml:
(5)POJO类
package cn.mybatis.pojo;import java.sql.Date;
public class User {
private int id;
private String username;
private String sex;
private String birthday;
private String address;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
(5)原始Dao接口的编写
package cn.mybatis.Dao;import cn.mybatis.pojo.User;
public interface UserDao {
//根据用户的id查询用户;
public User findUserById(int id);
//添加一个用户信息;
public void insertUser(User user);
//删除一个用户的基本信息;
public void deleteUser(int id);
}
(6)原始Dao接口的实现类
package cn.mybatis.Dao;import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import cn.mybatis.pojo.User;
public class UserDaoImpl implements UserDao {
//需要向Dao实现类中注入sqlsessionFactory;
//这里通过构造方法注入;
private SqlSessionFactory sqlSessionFactory;
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory=sqlSessionFactory;
}
public User findUserById(int id) {
SqlSession sqlSession=sqlSessionFactory.openSession();
User user=sqlSession.selectOne("test.findUserById", id);
//释放资源
sqlSession.close();
return user;
}
public void insertUser(User user) {
SqlSession sqlSession=sqlSessionFactory.openSession();
///这一部分代码之所以不要是因为接口已经传染源了user 所以不用再用user.set了
/*User user=new User();
user.setUsername("王小军");
user.setSex("男");
user.setBirthday("2015-3-20");
user.setAddress("河南洛阳");*/
//执行插入操作
sqlSession.insert("test.insertUser", user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
@Override
public void deleteUser(int id) {
SqlSession sqlSession=sqlSessionFactory.openSession();
sqlSession.update("test.deleteUser", id);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
}
}
(6)测试方法(junit测试)就举一个例子吧,其他的大致相同的模式。
package cn.mybatis.Dao;import static org.junit.Assert.*;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import cn.mybatis.pojo.User;
public class UserDaoImplTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
//mybatis配置文件
String resource="sqlMapConfig.xml";
InputStream inputStream;
//得到配置文件数据流
inputStream = Resources.getResourceAsStream(resource);
//创建会话工厂
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
}
@After
public void tearDown() throws Exception {
}
@Test
public void testFindUserById() {
//创建UserDao的对象;
UserDao userDao=new UserDaoImpl(sqlSessionFactory);
User user=userDao.findUserById(27);
System.out.println(user.getUsername());
}
}
测试结果:
以上总结希望对大家有所帮助,同时也加深我的印象吧!!!
(2)sqlMapconfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"></properties>
<!-- 和spring整合后 environments配置将废除-->
<environments default="development">
<environment id="development">
<!-- 使用jdbc事务管理,事务控制是由mybatis控制的-->
<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>
<!-- 加载映射文件 -->千万不能忘记此处的映射文件的加载
<mappers>
<mapper resource="sqlmapr/mapper.xml"></mapper>
</mappers>
</configuration>