Mybatis-05-original dao development method

This section introduces the development method of the original dao. There are some problems in the original dao method, such as: there are a lot of template codes (session.close(), session.commit()...), the parameter statement when calling the method of SqlSession The ID is hard-coded, and the incoming parameter variable value may have a type transfer error due to generics (but the compiler does not report an error, only an error occurs at runtime).

Although the original dao method is not recommended, it is sometimes used in actual development projects, so I will briefly record it here.

1. Database table structure:

 a single table (user), very simple, not much to say.

 

2. Model class:

package com.wp.model;

import java.util.Date;

public class User {
	
	private int id;
	private String userName;
	private int sex;
	private int age;
	private Date birthDay;
	private String address;
	
	// get   set
	
	public User() {
		super();
	}
	
	public User(int id, String userName, int sex, int age, Date birthDay,
			String address) {
		super();
		this.id = id;
		this.userName = userName;
		this.sex = sex;
		this.age = age;
		this.birthDay = birthDay;
		this.address = address;
	}
	
	public User(String userName, int sex, int age, Date birthDay, String address) {
		super();
		this.userName = userName;
		this.sex = sex;
		this.age = age;
		this.birthDay = birthDay;
		this.address = address;
	}
	
	public String toString() {
		return "User [address=" + address + ", age=" + age + ", birthDay="
				+ birthDay + ", id=" + id + ", sex=" + sex + ", userName="
				+ userName + "]";
	}
	
}

 

3. Mybatis global configuration file:

<?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>
	<!-- Load database configuration file-->
	<properties resource="db.properties"/>

	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<!-- Configure data source information-->
			<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>
	
	<!-- Load map file -->
	<mappers>
		<mapper resource="mapper/User.xml"/>
	</mappers>
</configuration>

 

4. Mapping file:

<?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="UserSpace">
	
	<!-- Query users by user ID-->
	<select id="selectById" parameterType="java.lang.Integer" resultType="com.wp.model.User">
		select * from user where id=#{id}
	</select>
	
	<!-- Fuzzy query user based on user name-->
	<select id="selectByVagueName" parameterType="java.lang.String" resultType="com.wp.model.User">
		select * from user where username like #{username}
	</select>
	
	<!-- Add User -->
	<insert id="addUser" parameterType="com.wp.model.User">
		insert into user(username, sex, age, birthday, address)
		values(#{userName}, #{sex}, #{age}, #{birthDay}, #{address})
	</insert>
	
	<!-- update user -->
	<update id="updateUser" parameterType="com.wp.model.User">
		update user set username=#{userName}, sex=#{sex}, age=#{age},
		birthday=#{birthDay}, address=#{address}
		where id=#{id}
	</update>
	
	<!-- delete user-->
	<delete id="deleteById" parameterType="java.lang.Integer">
		delete from user where id=#{id}
	</delete>
	
</mapper>

 

5. Dao interface:

package com.wp.dao;

import java.util.List;

import com.wp.model.User;

public interface UserDao {
	
	public User getById(int id);
	
	public List<User> getByName(String userName);
	
	public void add(User user);
	
	public void update(User user);
	
	public void delete(int id);
	
}

 

6. Interface implementation class:

     Since SqlSessionFactory is thread-safe, it is sufficient to share a SqlSessionFactory in the implementation class. But SqlSession must not be shared.

package com.wp.dao.impl;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import com.wp.dao.UserDao;
import com.wp.model.User;

public class UserDaoImpl implements UserDao {

	private SqlSessionFactory sessionFactory;
	
	public UserDaoImpl(SqlSessionFactory sessionFactory) {
		this.sessionFactory = sessionFactory;
	}

	@Override
	public void add(User user) {
		SqlSession session = this.sessionFactory.openSession();
		session.insert("UserSpace.addUser", user);
		session.commit();
		session.close();
	}

	@Override
	public void delete(int id) {
		SqlSession session = this.sessionFactory.openSession();
		session.delete("UserSpace.deleteById", id);
		session.commit();
		session.close();
	}

	@Override
	public User getById(int id) {
		SqlSession session = this.sessionFactory.openSession();
		User user = session.selectOne("UserSpace.selectById", id);
		session.close();
		return user;
	}

	@Override
	public List<User> getByName(String userName) {
		SqlSession session = this.sessionFactory.openSession();
		List<User> userList = session.selectList("UserSpace.selectByVagueName", userName);
		session.close();
		return userList;
	}

	@Override
	public void update(User user) {
		SqlSession session = this.sessionFactory.openSession();
		session.update("UserSpace.updateUser", user);
		session.commit();
		session.close();
	}

}

 

7. Test procedure:

    Get the global SqlSessionFactory at the beginning of the test class and pass it to the interface implementation class.

package com.wp.dao.impl;

import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;

import com.wp.dao.UserDao;
import com.wp.model.User;
import com.wp.util.DateUtil;

public class UserDaoImplTest {

	private SqlSessionFactory sessionFactory;
	
	@Before
	public void setUp() throws Exception {
		String resource = "mybatis-config.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		this.sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	}

	@Test
	public void testAdd() {
		Date date = DateUtil.parseStrToFullDate("2001-11-20", "yyyy-MM-dd");
		User user = new User("Min Min T Moore", 0, 17, date, "Where you are, where I am!");
		UserDao userDao = new UserDaoImpl(this.sessionFactory);
		userDao.add(user);
		System.out.println("Adding completed...");
	}

	@Test
	public void testDelete() {
		UserDao userDao = new UserDaoImpl(this.sessionFactory);
		userDao.delete(3);
		System.out.println("Deletion complete...");
	}

	@Test
	public void testGetById() {
		UserDao userDao = new UserDaoImpl(this.sessionFactory);
		User user = userDao.getById(11);
		System.out.println("Query by primary key: " + user);
	}

	@Test
	public void testGetByName() {
		UserDao userDao = new UserDaoImpl(this.sessionFactory);
		List<User> userList = userDao.getByName("%谢%");
		System.out.println("Name query: " + userList);
	}

	@Test
	public void testUpdate() {
		UserDao userDao = new UserDaoImpl(this.sessionFactory);
		Date date = DateUtil.parseStrToFullDate("1073-11-20", "yyyy-MM-dd");
		User user = new User(12, "White Eyed Eagle King", 1, 99, date, "Eagle Claw!");
		userDao.update(user);
		System.out.println("Update complete...");
	}

}

 

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=326417589&siteId=291194637