使用接口完成增删改查操作
本文将继续前边的例子完成CRUD(增加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)首字母简写)的操作。
CRUD主要被用在描述软件系统中数据库或者持久层的基本操作功能。
在之前的demo例子mybatis测试类里直接调用mapper文件完了一个查询操作,现在我们使用后接口进行方法的定义、
首先新建立dao接口包和接口实现类包以及对应实体的UserDao接口和UserDaoImpl实现类
在接口中定义CRUD的操作方法
package com.jsx.dao;
import java.util.List;
import com.jsx.pojo.User;
public interface UserDao {
/**
* 添加用户
* @param user
*/
public void addUser(User user);
/**
* 根据id删除用户
* @param id
*/
public void deleteUser(Long id);
/**
* 更新用户信息
* @param user
*/
public void updateUserById(User user);
/**
* 根据用户id返回用户信息
* @param id
* @return
*/
public User findUserById(Long id);
/**
* 根据用户名和密码返回用户信息
* @param username
* @param password
* @return
*/
public User findUserByNameAndPwd(User user);
/**
* 返回所有用户信息
* @return List<User>
*/
public List<User> findUserAll();
}
然后去实现类实现接口中定义的方法,由于方法执行需要sqlSession,所以要把sqlSession已构造函数的形式传入
然后实现所有方法
package com.jsx.dao.impl;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.SqlSession;
import com.jsx.dao.UserDao;
import com.jsx.pojo.User;
public class UserDaoImpl implements UserDao{
private SqlSession sqlSession;
public UserDaoImpl(SqlSession sqlSession){
this.sqlSession = sqlSession;
}
@Override
public void addUser(User user) {
sqlSession.insert("UserMapper.addUser",user);
}
@Override
public void deleteUserById(Long id) {
sqlSession.delete("UserMapper.deleteUserById",id);
}
@Override
public void updateUser(User user) {
sqlSession.update("UserMapper.updateUser",user);
}
@Override
public User findUserById(Long id) {
return sqlSession.selectOne("UserMapper.findUserById", id);
}
@Override
public User findUserByNameAndPwd(User user) {
return sqlSession.selectOne("UserMapper.findUserByNameAndPwd",user);
}
@Override
public List<User> findUserAll() {
return sqlSession.selectList("UserMapper.findUserAll");
}
}
在UserMapper配置文件定义接口方法实现的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="UserMapper">
<!-- 插入语句定义 -->
<insert id="addUser" parameterType="com.jsx.pojo.User">
INSERT INTO
t_user(user_name,password,name,age,sex,birthday,created,updated)
VALUES
(
#{userName},
#{password},
#{name},#{age},
#{sex},
#{birthday},
NOW(),NOW());
</insert>
<!-- 删除语句定义 -->
<delete id="deleteUserById">
delete from t_user where id = #{id}
</delete>
<!-- 修改语句定义 -->
<update id="updateUser">
UPDATE t_user
SET
user_name = #{userName},
password = #{password},
name = #{name},
age = #{age},
sex = #{sex},
birthday = #{birthday},
updated = NOW()
WHERE
(id = #{id});
</update>
<!-- 查询 id 标识(唯一) resultType结果集映射的java对象类型 -->
<select id="findUserById" resultType="com.jsx.pojo.User">
select * ,user_name as username from t_user where id = #{id}
</select>
<select id="findUserByNameAndPwd" resultType="com.jsx.pojo.User">
select * ,user_name as username from t_user
where user_name = #{userName} and password = #{password}
</select>
<select id="findUserAll" resultType="com.jsx.pojo.User">
select *,user_name as username from t_user
</select>
</mapper>
添加junit支持,并创建UserDao的测试类
在pom.xml文件添加
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
在UserDao右键点击创建junit测试类,路径选择到/mybatis01/src/test/java
完成对上先写的方法测试
package com.jsx.test;
import static org.junit.Assert.fail;
import java.io.InputStream;
import java.util.Date;
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 org.junit.Before;
import org.junit.Test;
import com.jsx.dao.UserDao;
import com.jsx.dao.impl.UserDaoImpl;
import com.jsx.pojo.User;
public class UserDaoTest {
SqlSession sqlSession =null;
UserDao userDao =null;
@Before
public void setUp() throws Exception {
//mybatis配置文件
String resource = "mybatis-config.xml";
//读取配置文件信息
InputStream is = Resources.getResourceAsStream(resource );
//构件SqlSessionFactory
SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(is);
//获取sqlSession
sqlSession = sf.openSession();
userDao = new UserDaoImpl(sqlSession);
}
@Test
public void testAddUser() {
User user = new User();
user.setuserName("dsadsad");
user.setPassword("sadsadsa");
user.setName("1234dsa");
user.setAge(18);
user.setSex(2);
user.setBirthday(new Date());
userDao.addUser(user);
System.out.println(user.toString());
sqlSession.commit();
}
@Test
public void testDeleteUserById() {
userDao.deleteUserById(36l);
sqlSession.commit();
}
@Test
public void testUpdateUser() {
User user = userDao.findUserById(37l);
user.setName("落尘曦1");
userDao.updateUser(user);
sqlSession.commit();
}
@Test
public void testFindUserById() {
User user = userDao.findUserById(26l);
System.out.println(user.toString());
}
@Test
public void testFindUserByNameAndPwd() {
User user = new User();
user.setuserName("123");
user.setPassword("123");
user = userDao.findUserByNameAndPwd(user);
System.out.println(user.toString());
}
@Test
public void testFindUserAll() {
List<User> findUserAll = userDao.findUserAll();
for (User user : findUserAll) {
System.out.println(user.toString());
}
}
}