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);

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章