版权声明:转载请注明原始链接 https://blog.csdn.net/sswqzx/article/details/83749183
1、编写UserDao接口
UserDao.java
package com.sswblog.dao;
import com.sswblog.domain.User;
import java.util.List;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 0:06 2018/11/5
*/
public interface UserDao {
/**
* 根据id查询用户
* @param id
* @return
*/
public User findUserById(Long id);
/**
* 查询所有用户
* @return
*/
public List<User> findAllUsers();
/**
* 保存用户
* @param user
*/
public void save(User user);
/**
* 根据id删除用户
* @param id
*/
public void delete(Long id);
/**
* 更新用户
* @param user
*/
public void update(User user);
}
2、编写UserDao接口实现类
UserDaoImpl.java
package com.sswblog.dao.Impl;
import com.sswblog.dao.UserDao;
import com.sswblog.domain.User;
import org.apache.ibatis.session.SqlSession;
import java.util.List;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 0:06 2018/11/5
*/
public class UserDaoImpl implements UserDao {
//dao层增删除改查需要SqlSession
private SqlSession sqlSession = null;
//构造方法
public UserDaoImpl(SqlSession sqlSession) {
this.sqlSession = sqlSession;
}
@Override
public User findUserById(Long id) {
User user = this.sqlSession.selectOne("UserDaoMapper.findUserById",id);
this.sqlSession.close();
return user;
}
@Override
public List<User> findAllUsers() {
List<User> users = this.sqlSession.selectList("UserDaoMapper.findAllUsers");
this.sqlSession.close();
return users;
}
@Override
public void save(User user) {
this.sqlSession.insert("UserDaoMapper.insertUser", user);
//mybatis自动提交功能关了。所以要手动提交事务
this.sqlSession.commit();
this.sqlSession.close();
}
@Override
public void delete(Long id) {
this.sqlSession.delete("UserDaoMapper.deleteUser",id);
this.sqlSession.commit();
this.sqlSession.close();
}
@Override
public void update(User user) {
this.sqlSession.update("UserDaoMapper.updateUser",user);
this.sqlSession.commit();
this.sqlSession.close();
}
}
3、CRUD标签
映射文件UserDaoMappers.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">
<!--映射文件的作用:用来存放sql语句
namespace:命名空间
-->
<mapper namespace="UserDaoMapper">
<!--通过id查询用户-->
<select id="findUserById" resultType="User">
select * from tb_user where id = #{id}
</select>
<!--查询所有用户-->
<select id="findAllUsers" resultType="User">
select * from tb_user;
</select>
<!--插入数据-->
<!--id:唯一标识、在同一命名空间下唯一-->
<!--parameterType:参数的类型-->
<!--useGeneratedKeys:开启主键回写-->
<!--keyColumn:主键列名-->
<!--keyProperty:主键对应的属性名-->
<!--内容:插入的sql-->
<!--插入数据时、传过来的参数是一个对象、#{**}中的名字必须与对象中属性名一致-->
<insert id="insertUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
insert into tb_user(
user_name,
password,
name,
age,
sex,
birthday,
created,
updated
)
values(
#{userName},
#{password},
#{name},
#{age},
#{sex},
#{birthday},
NOW(),
NOW()
)
</insert>
<!--更新操作:update-->
<!--id:唯一标识、在同一命名空间下唯一-->
<!--parameterType:语句中占位符、表示参数的类型-->
<!--更新数据时、传过来的参数是一个对象#{****}中名字必须与对象属性名致-->
<update id="updateUser">
UPDATE tb_user set
user_name = #{userName},
password = #{password},
name = #{name},
age = #{age},
sex = #{sex},
birthday = #{birthday},
updated = NOW()
WHERE
id = #{id}
</update>
<!--删除delete-->
<!--id:唯一标识-->
<!--parameterType:占位符、参数的类型-->
<!---->
<delete id="deleteUser">
delete from tb_user where id = #{id}
</delete>
</mapper>
mybatis核心配置文件:
<?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>
<!--引入外部属性资源文件-->
<properties resource="jdbc.properties"/>
<!--开启驼峰、让实体类的属性和数据库中的键一一映射-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--开启别名-->
<typeAliases>
<!--<typeAlias type="com.sswblog.domain.User" alias="User" />-->
<package name="com.sswblog.domain"/>
</typeAliases>
<!--
environments标签:用于配置多个环境(测试环境、生产环境)
default属性:默认环境的id
environment标签:配置一个具体的环境
id属性:一个具体环境的id
transactionManager标签:指定事务的类型
type属性:可以取的值有:JDBC|MANAGED
JDBC:表示从数据源获取数据库连接来提交或回滚事务
MANAGED:表示把事务交给容器来管理,一般不用
dataSource标签:配置数据源
type属性:指定数据源类型,可以取的值有:UNPOOLED|POOLED|JNDI
UNPOOLED:无连接池的数据源,每次都重新获取数据库连接,使用完后关闭连接
POOLED:带连接池的数据源
JNDI:使用JNDI数据源
-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!--指定驱动类名-->
<property name="driver" value="${jdbc.driverClass}"/>
<!-- 指定连接地址 -->
<property name="url" value="${jdbc.url}"/>
<!-- 指定用户名 -->
<property name="username" value="${jdbc.username}"/>
<!-- 指定密码 -->
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="UserMappers.xml"></mapper>
<mapper resource="UserDaoMappers.xml"></mapper>
</mappers>
</configuration>
实体类:
package com.sswblog.domain;
import java.io.Serializable;
import java.util.Date;
/**
* @ Author :ssw.
* @ Date :Created in 19:44 2018/11/4
*/
public class User implements Serializable {
private static final long serialVersionUid = 1L;
private Long id;
private String userName;
private String password;
private String name;
private Integer age;
private Integer sex;
private Date birthday;
private Date created;
private Date updated;
public static long getSerialVersionUid() {
return serialVersionUid;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Integer getSex() {
return sex;
}
public void setSex(Integer sex) {
this.sex = sex;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
public Date getCreated() {
return created;
}
public void setCreated(Date created) {
this.created = created;
}
public Date getUpdated() {
return updated;
}
public void setUpdated(Date updated) {
this.updated = updated;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
", birthday=" + birthday +
", created=" + created +
", updated=" + updated +
'}';
}
}
4、创建单元测试类
UserDaoImplTest.java
package com.sswblog.test;
import com.sswblog.dao.Impl.UserDaoImpl;
import com.sswblog.dao.UserDao;
import com.sswblog.domain.User;
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 java.io.InputStream;
import java.util.Date;
import java.util.List;
/**
* @ Author :ShaoWei Sun.
* @ Date :Created in 15:05 2018/11/5
*/
public class UserDaoImplTest {
private UserDao userDao = null;
@Before
public void setUp() throws Exception {
InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
SqlSession sqlSession = sqlSessionFactory.openSession();
userDao = new UserDaoImpl(sqlSession);
}
@Test
public void findUserById() {
User user = userDao.findUserById(2L);
System.out.println("user = " + user);
}
@Test
public void findAllUsers() {
List<User> list = userDao.findAllUsers();
for (User user : list) {
System.out.println("user = " + user);
}
}
@Test
public void save() {
User user = new User();
user.setUserName("小王");
user.setPassword("111111");
user.setName("库里");
user.setSex(1);
user.setAge(22);
Date date = new Date();
user.setBirthday(date);
userDao.save(user);
System.out.println("user = " + user);
}
@Test
public void delete() {
userDao.delete(3L);
}
@Test
public void update() {
User user = new User();
user.setId(5L);
user.setUserName("天天一");
user.setPassword("666666");
user.setName("库里2");
user.setSex(1);
user.setAge(22);
Date date = new Date();
user.setBirthday(date);
userDao.update(user);
}
}