Mybatis基本增删改查

Mybatis基本增删改查

核心配置文件

mybatis-config.xml

<?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"/>
    <!--指定什么阶段:开发、测试、生产-->
    <environments default="development">
        <environment id="development">
            <!--transactionManager事务管理器-->
            <transactionManager type="JDBC"/>
            <!--dataSource数据源-->
            <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>
    <mappers>
        <mapper resource="hsy/cool/dao/UsersMapper.xml"/>
        <mapper resource="hsy/cool/dao/AccessLogsMapper.xml"/>
        <mapper resource="hsy/cool/dao/NewsMapper.xml"/>
        <mapper resource="hsy/cool/dao/ReplysMapper.xml"/>
        <mapper resource="hsy/cool/dao/ShortReplysMapper.xml"/>
    </mappers>
</configuration>

jdbc.properties

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3308/news?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
jdbc.username=root
jdbc.password=root

log4j.properties

log4j.rootLogger = DEBUG,CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-4r %-5p [%t] %37c %3x - %m%n

log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.FILE.layout = org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] - %m%n
#myApp.root param from web.xml
log4j.appender.FILE.File=log4j.log 

log4j.logger.org.apache.ibatis=TRACE
log4j.logger.com.dao=TRACE

Bean类

package hsy.cool.bean;

import java.util.Date;

public class Users {
    private int id;
    private String nickname;
    private String realname;
    private String pwd;
    private String phone;
    private String email;
    private String address;
    private Date createTime;
    private int type;
    private String realid;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public String getRealname() {
        return realname;
    }

    public void setRealname(String realname) {
        this.realname = realname;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    public String getRealid() {
        return realid;
    }

    public void setRealid(String realid) {
        this.realid = realid;
    }
}

Dao层

package hsy.cool.dao;

import hsy.cool.bean.Users;

import java.util.List;

public interface UsersMapper {
    Users findById(int id);
    Users findByName(String name);  //按照name去查,暂时不实现。
    List<Users>findAll();
    void add(Users user);
    void update(Users user);
    void delete(int id);

}

Mapper.xml

按照id查找

<?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">
<!--!DOCTYPE configuration SYSTEM "mybatis-3-config.dtd" -->


<mapper namespace="hsy.cool.dao.UsersMapper">
  <!--按照id查找-->
    <select id="findById" resultType="hsy.cool.bean.Users" parameterType="int">
      select
      id,
      nickname,
      realname,
      pwd,
      phone,
      email,
      address,
      create_time createTime,
      type,
      realid
      from n_users where id=#{id}
  </select>
 </mapper>
@Test
    public void findById(){
        SqlSession session=factory.openSession();
        Users user=session.selectOne("hsy.cool.dao.UsersMapper.findById",2);
        session.close();
        //断言 assert 语言级别的断言 相当与方法
        //Assert. junit包下的  junit提供的类  取代了assert
       Assert.assertNotNull(user);

       //测试名字
        Assert.assertEquals("匿名",user.getNickname());
        //测试密码
        Assert.assertEquals("123",user.getPwd());
        //日期类型转换
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        String srt=df.format(user.getCreateTime());
        Assert.assertEquals("2020-03-21",srt);
    }

查找所有用户

Mapper.xml
<!--查找所有-->
    <select id="findAll" resultType="hsy.cool.bean.Users">
        select
        id,
        nickname,
        realname,
        pwd,
        phone,
        email,
        address,
        create_time createTime,
        type,
        realid
        from n_users
        order by id
    </select>
细节:注意 order by
测试方法
  public void findAll(){
        SqlSession session=factory.openSession();
        List<Users> list=session.selectList("hsy.cool.dao.UsersMapper.findAll");
        session.close();
        Assert.assertNotNull(list);
        Assert.assertEquals(4,list.size());
        Assert.assertEquals("匿名啊啊啊",list.get(0).getNickname());

    }

添加一个用户

Mapper.xml
 <!--添加一个用户-->
    <insert id="add" parameterType="hsy.cool.bean.Users">
        insert into n_users(nickname,realname,pwd,phone,email,address,create_time,type,realid)
        value
        (#{nickname},#{realname},#{pwd},#{phone},#{email},#{address},#{createTime},#{type},#{realid})
    </insert>
细节:注意id不能修改不能插入。数据库自动生成
测试方法

@Test
    public void add(){
        Users user=new Users();
        user.setNickname("小牛");
        user.setRealname("牛总");
        user.setPhone("18888888");
        user.setEmail("[email protected]");
        user.setAddress("中国");
        user.setCreateTime(new Date());
        SqlSession session=factory.openSession();
        session.insert("hsy.cool.dao.UsersMapper.add",user);
        session.commit();  /*事务在这里不会自动提交,因此需要手动提交*/
        Users userDb=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        session.close();
        Assert.assertNotNull(userDb);
        Assert.assertEquals("小牛",userDb.getNickname());
    }
细节:注意手动提交事务

修改用户

Mapper.xml
<!--修改用户-->
    <update id="update" parameterType="hsy.cool.bean.Users">
        update n_users set
             nickname=#{nickname},
             realname=#{realname},
             pwd=#{pwd},
             phone=#{phone},
             email=#{email},
             address=#{address},
             create_time=#{createTime},
             type=#{type},
             realid=#{realid}
             where id=#{id}
    </update>
细节:#{xxxx}表达式取到的是 首字母大写,前加get,后加()的方法,如#{haosy}取到的实际是getHaosy()这个方法的值。
测试方法
@Test
    public void update(){
        SqlSession session=factory.openSession();
        Users userDb=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        userDb.setNickname("牛牛");
        //crete_time 2020-04-02 14:41:34 ==>2020-04-02
        //拿到的是当前时间 年月日时分秒毫秒2020-04-02 14:41:34 45
        Calendar cl=Calendar.getInstance();
        cl.set(Calendar.YEAR,1999);//年
        cl.set(Calendar.MARCH,3); //月份是从0开始的 0-11==》1到12月
        cl.set(Calendar.DAY_OF_MONTH,4);//日是从1开始的
        cl.set(Calendar.HOUR_OF_DAY,14); //24小时
        cl.set(Calendar.MINUTE,41);
        cl.set(Calendar.SECOND,34);
        cl.set(Calendar.MILLISECOND,0);
        Date date=cl.getTime();
        userDb.setCreateTime(date);
        session.update("hsy.cool.dao.UsersMapper.update",userDb);
        session.commit();  /*事务在这里不会自动提交,因此需要手动提交*/
        Users user=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        Assert.assertNotNull(user);
        Assert.assertEquals(date,user.getCreateTime());
        Assert.assertEquals("牛牛",user.getNickname());
    }
细节:
Calendar cl=Calendar.getInstance(); 这种日期类是java官方推荐的日期类,
日期类型转换SimpleDateFormat df=new SimpleDateFormat(“yyyy-MM-dd”); 这种日期类多用在web端,大家自己考虑使用。

删除用户

测试方法
    @Test
    public void delete(){
        //主从表 父子表  主键所在的表是主表/父表,反之为从表/子表
        //delete from n_users where id=1
       //1.添加数据的时候,先加主表数据,再加从表数据。
        //2.删除数据的时候,先删除从表数据,再删除主表数据。
        SqlSession session=factory.openSession();
        session.delete("hsy.cool.dao.AccessLogsMapper.delete",99);
        session.delete("hsy.cool.dao.NewsMapper.delete",99);
        session.delete("hsy.cool.dao.ReplysMapper.delete",99);
        session.delete("hsy.cool.dao.ShortReplysMapper.delete",99);
        session.delete("hsy.cool.dao.UsersMapper.delete",12);
        session.commit();
        //校验一下
        Users users=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        Assert.assertNull(users);

    }
可以看到需要补充一下代码内容,补充一下
Bean类
public class AccessLogs {
    private int id;
    private String ip;
    private Date intime;
    private int news_id;
    private int users_id;
    //settter/getter...
}
public class News {
    private int id;
    private String title;
    private String content;
    private int users_id;
    private int category_id;
    private Date pubtime;
    private String keywords;
    private  int state;
    private int check_users_id;
    private Date check_time;
    private int is_elite;
    //settter/getter...
}
public class Replys {
    private int id;
    private int news_id;
    private String content;
    private  int users_id;
    private  int replys_id;
    private Date create_time;
    //settter/getter...
}
public class ShortReplys {
    private int id;
    private int news_id;
    private int type;
    private Date create_time;
    private int users_id;
//settter/getter...
}
注意:为了给大家讲课名字起的不规范,大家自己注意。
Dao层
public interface AccessLogsMapper {
    void delete(int id);
}
public interface NewsMapper {
    void delete(int id);
}
public interface ReplysMapper {
    void delete(int id);
}
public interface ShortReplysMapper {
    void delete(int id);
}
XXX.xml
<mapper namespace="hsy.cool.dao.AccessLogsMapper">
    <!--删除-->
    <delete id="delete" parameterType="int">
        delete from n_access_logs  where id=#{id}
    </delete>
</mapper>

<mapper namespace="hsy.cool.dao.NewsMapper">
    <!--删除-->
    <delete id="delete" parameterType="int">
        delete from n_news where id=#{id}
    </delete>
</mapper>

<mapper namespace="hsy.cool.dao.ReplysMapper">
    <!--删除-->
    <delete id="delete" parameterType="int">
        delete from n_replys where id=#{id}
    </delete>
</mapper>

<mapper namespace="hsy.cool.dao.ShortReplysMapper">
    <!--删除-->
    <delete id="delete" parameterType="int">
        delete from n_short_replys where id=#{id}
    </delete>
</mapper>

  <!--删除-->
    <delete id="delete" parameterType="int">
        delete from n_users where id=#{id}
    </delete>
细节:
        //主从表 父子表  主键所在的表是主表/父表,反之为从表/子表
        //delete from n_users where id=1
        //1.添加数据的时候,先加主表数据,再加从表数据。
        //2.删除数据的时候,先删除从表数据,再删除主表数据。

完整测试类

package hsy.cool.dao;

import hsy.cool.bean.Users;
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.Assert;
import org.junit.Test;


import java.io.InputStream;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

public class UsersMapperTest {
    static final String CONFIG_FILE="mybatis-config.xml";
    //只要程序存在,工厂就在,所以定义成static
    static SqlSessionFactory factory;
    static {
        SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
        try {
            InputStream inputStream= Resources.getResourceAsStream(CONFIG_FILE);
            factory=builder.build(inputStream);
        }catch (Exception e){
            e.printStackTrace();
        }

    }
    @Test
    public void findById(){
        SqlSession session=factory.openSession();
        Users user=session.selectOne("hsy.cool.dao.UsersMapper.findById",2);
        session.close();
        //断言 assert 语言级别的断言 相当与方法
        //Assert. junit包下的  junit提供的类  取代了assert
       Assert.assertNotNull(user);

       //测试名字
        Assert.assertEquals("匿名",user.getNickname());
        //测试密码
        Assert.assertEquals("123",user.getPwd());
        //日期类型转换
        SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
        String srt=df.format(user.getCreateTime());
        Assert.assertEquals("2020-03-21",srt);
    }
    @Test
    public void findAll(){
        SqlSession session=factory.openSession();
        List<Users> list=session.selectList("hsy.cool.dao.UsersMapper.findAll");
        session.close();
        Assert.assertNotNull(list);
        Assert.assertEquals(4,list.size());
        Assert.assertEquals("匿名啊啊啊",list.get(0).getNickname());

    }
    @Test
    public void add(){
        Users user=new Users();
        user.setNickname("小牛");
        user.setRealname("牛总");
        user.setPhone("18888888");
        user.setEmail("[email protected]");
        user.setAddress("中国");
        user.setCreateTime(new Date());
        SqlSession session=factory.openSession();
        session.insert("hsy.cool.dao.UsersMapper.add",user);
        session.commit();  /*事务在这里不会自动提交,因此需要手动提交*/
        Users userDb=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        session.close();
        Assert.assertNotNull(userDb);
        Assert.assertEquals("小牛",userDb.getNickname());
    }
    @Test
    public void update(){
        SqlSession session=factory.openSession();
        Users userDb=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        userDb.setNickname("牛牛");
        //crete_time 2020-04-02 14:41:34 ==>2020-04-02
        //拿到的是当前时间 年月日时分秒毫秒2020-04-02 14:41:34 45
        Calendar cl=Calendar.getInstance();
        cl.set(Calendar.YEAR,1999);//年
        cl.set(Calendar.MARCH,3); //月份是从0开始的 0-11==》1到12月
        cl.set(Calendar.DAY_OF_MONTH,4);//日是从1开始的
        cl.set(Calendar.HOUR_OF_DAY,14); //24小时
        cl.set(Calendar.MINUTE,41);
        cl.set(Calendar.SECOND,34);
        cl.set(Calendar.MILLISECOND,0);
        Date date=cl.getTime();
        userDb.setCreateTime(date);
        session.update("hsy.cool.dao.UsersMapper.update",userDb);
        session.commit();  /*事务在这里不会自动提交,因此需要手动提交*/
        Users user=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        Assert.assertNotNull(user);
        Assert.assertEquals(date,user.getCreateTime());
        Assert.assertEquals("牛牛",user.getNickname());
    }
    @Test
    public void delete(){
        //主从表 父子表  主键所在的表是主表/父表,反之为从表/子表
        //delete from n_users where id=1
       //1.添加数据的时候,先加主表数据,再加从表数据。
        //2.删除数据的时候,先删除从表数据,再删除主表数据。
        SqlSession session=factory.openSession();
        session.delete("hsy.cool.dao.AccessLogsMapper.delete",99);
        session.delete("hsy.cool.dao.NewsMapper.delete",99);
        session.delete("hsy.cool.dao.ReplysMapper.delete",99);
        session.delete("hsy.cool.dao.ShortReplysMapper.delete",99);
        session.delete("hsy.cool.dao.UsersMapper.delete",12);
        session.commit();
        //校验一下
        Users users=session.selectOne("hsy.cool.dao.UsersMapper.findById",12);
        Assert.assertNull(users);

    }
}

发布了87 篇原创文章 · 获赞 232 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_43518645/article/details/105277572