The so-called original dao development method is actually similar to the hibernate development method, which requires dao interfaces and dao implementation classes.
There are several important classes for Dao development in MyBatis, they are SqlSessionFactoryBuilder, SqlSessionFactory, and SqlSession.
SqlSession encapsulates operations on the database, such as: query, insert, update, delete, etc. SqlSession is created through SqlSessionFactory , and SqlSessionFactory is created through SqlSessionFactoryBuilder.
1、SqlSessionFactoryBuilder
SqlSessionFactoryBuilder is used to create SqlSessionFacoty. Once SqlSessionFacoty is created, SqlSessionFactoryBuilder is not needed. Because SqlSession is produced by SqlSessionFactory , SqlSessionFactoryBuilder can be used as a tool class. The best scope of use is the method scope, that is, the local variables in the method body.
2、SqlSessionFactory
SqlSessionFactory is an interface that defines different overloaded methods of openSession. The best use of SqlSessionFactory is during the entire application running period. Once created, it can be reused. Usually, SqlSessionFactory is managed in a singleton mode .
3、SqlSession
SqlSession is a user-oriented interface. Database operations are defined in sqlSession , and the DefaultSqlSession implementation class is used by default .
SqlSession provides many methods for operating the database: such as: selectOne ( returns a single object ) , selectList (returns a single or multiple objects), SqlSession is thread-unsafe, singleton mode, in the SqlSesion implementation class in addition to the interface in the The method (the method of operating the database) also has the data domain attribute. The best application of SqlSession is in the body of the method, which is defined as a local variable. The reference of the SqlSession instance must not be placed in a static field or instance field of a class.
The classes are IUserDao.java, UserDaoImpl.java
IUserDao.java
package cn.bj.mybatis.dao;
import cn.bj.mybatis.model.User;
public interface IUserDao {
//Query user information according to user ID
public User selectUser(int id);
//Add user information
public void addUser(User user);
//delete user information
public void deleteUser(int id);
//modify user information
public void updateUser(User user);
}
UserDaoImpl.java
package cn.bj.mybatis.dao.impl;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import cn.bj.mybatis.dao.IUserDao;
import cn.bj.mybatis.model.User;
public class UserDaoImpl implements IUserDao{
//需要向dao实现类中注入sqlSessionFactory
private SqlSessionFactory sqlSessionFactory;
//在这里用构造方法注入
public UserDaoImpl(SqlSessionFactory sqlSessionFactory){
this.sqlSessionFactory = sqlSessionFactory;
}
@Override
public User selectUser(int id) {
SqlSession session = sqlSessionFactory.openSession();
User user = session.selectOne("cn.bj.mybatis.models.UserMapper.selectUser", id);
session.close();
return user;
}
@Override
public void addUser(User user) {
SqlSession session = sqlSessionFactory.openSession();
session.insert("cn.bj.mybatis.models.UserMapper.addUser", user);
session.commit();
session.close();
}
@Override
public void deleteUser(int id) {
SqlSession session = sqlSessionFactory.openSession();
session.delete("cn.bj.mybatis.models.UserMapper.deleteUser", id);
session.commit();
session.close();
}
@Override
public void updateUser(User user) {
SqlSession session = sqlSessionFactory.openSession();
session.update("cn.bj.mybatis.models.UserMapper.updateUser", user);
session.commit();
session.close();
}
}
User.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="cn.bj.mybatis.models.UserMapper">
-->
<mapper namespace="cn.bj.mybatis.models.UserMapper">
<select id="getUserOrders" parameterType="int" resultMap="resultUserOrderList">
select t_user.id,t_user.username,t_user.age,t_order.id o_id,t_order.orderName from t_user,t_order where t_user.id=t_order.userid and t_user.id=#{id}
</select>
<resultMap type="Order" id="resultUserOrderList">
<id property="id" column="o_id"/>
<result property="orderName" column="orderName"/>
<association property="user" javaType="User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="age" column="age" />
</association>
</resultMap>
<!-- 查询数据 -->
<select id="selectUser" resultType="User">
select * from t_user where id = #{id}
</select>
<!-- 增加数据 -->
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
insert into t_user(username,age) values(#{username},#{age})
</insert>
<!-- 修改数据 -->
<update id="updateUser" parameterType="User">
update t_user set username=#{username},age=#{age} where id=#{id}
</update>
<!-- 删除数据 -->
<delete id="deleteUser" parameterType="int">
delete from t_user where id = #{id}
</delete>
</mapper>
Mybatistest.java
package cn.bj.mybatis.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import cn.bj.mybatis.dao.IUserDao;
import cn.bj.mybatis.dao.impl.UserDaoImpl;
import cn.bj.mybatis.model.IUserOperation;
import cn.bj.mybatis.model.Order;
import cn.bj.mybatis.model.User;
public class MybatisTest {
public static void main(String[] args){
SqlSessionFactory sqlSessionFactory = null;
SqlSession session = null;
String resource = "Configuration.xml";
InputStream inputStream;
try {
inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
IUserDao userDao = new UserDaoImpl(sqlSessionFactory);
//User user = userDao.selectUser(2);查询
//
/*修改
User user = userDao.selectUser(2);
user.setAge(90);
userDao.updateUser(user);
*/
/**添加
User user = new User();
user.setUsername("kkddkdk");
user.setAge(20);
userDao.addUser(user);
*/
/**
* 删除
userDao.deleteUser(2);
*/
} catch (IOException e) {
e.printStackTrace();
}finally{
if(session != null){
session.close();
}
}
}
}