Mybatis --03.mybatis中的CRUD操作

版权声明:转载请注明原始链接 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);
    }
}

猜你喜欢

转载自blog.csdn.net/sswqzx/article/details/83749183