当前位置: 首页 > news >正文

05 Mybatis应用篇---XML映射文件之select,insert,update,delete实战

前面 04 Mybatis应用篇---XML映射文件之select,insert,update,delete基础介绍  ,简单的介绍了一下XML映射文件之select,insert,update和delete的基本使用,这节以一个简单的demo演示一下MyBatis的CRUD。

目录:



pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>hzq</groupId>
  <artifactId>hzq_mybatis_crud</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>hzq_mybatis_crud Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.0</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
    </dependency>
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.16</version>
    </dependency>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.41</version>
    </dependency>
  </dependencies>
  <build>
    <finalName>hzq_mybatis_crud</finalName>
  </build>
</project>

库表设计:

CREATE  TABLE sys_user (
    userno     INT(11) NOT NULL AUTO_INCREMENT ,
    username   VARCHAR(32)       DEFAULT NULL,
    password   VARCHAR(32)       DEFAULT NULL,
    age        INT(11)           DEFAULT NULL,
    createTime DATETIME          DEFAULT NULL,
    PRIMARY KEY (userno)
);


配置文件:


db.properties

url:jdbc:mysql://192.168.0.104:3306/mybatis?useUnicode=true&characterEncoding=utf8
driver:com.mysql.jdbc.Driver
username:root
password:root


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="db.properties"/>
    <settings>
        <!--配置log4j-->
        <setting name="logImpl" value="LOG4J"/>
    </settings>
    <!--注册别名-->
    <typeAliases>
        <package name="hzq.mybatis.crud.entity"/>
    </typeAliases>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <dataSource type="POOLED">
                <property name="driver" value="${driver}"/>
                <property name="url" value="${url}"/>
                <property name="username" value="${username}"/>
                <property name="password" value="${password}"/>
            </dataSource>
        </environment>
    </environments>
    <!--添加mapper映射文件-->
    <mappers>
        <mapper resource="hzq/UserMapper.xml"/>
    </mappers>
</configuration>

log4j.properties

log4j.rootLogger=debugger,CONSOLE,A
log4j.addivity.org.apache=false

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=DEBUG
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} -%-4r [%t] %-5p  %x - %m%n
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.Encoding=gbk
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout

log4j.appender.A=org.apache.log4j.DailyRollingFileAppender  
log4j.appender.A.File=${catalina.home}/logs/FH_log/PurePro_
log4j.appender.A.DatePattern=yyyy-MM-dd'.log'
log4j.appender.A.layout=org.apache.log4j.PatternLayout  
log4j.appender.A.layout.ConversionPattern=[FH_sys]  %d{yyyy-MM-dd HH\:mm\:ss} %5p %c{1}\:%L \: %m%n


代码:

User实体:

package hzq.mybatis.crud.entity;

import java.util.Date;

/**
 * Created by hzq on 2017/4/9.
 */
public class User {
    private int userno;
    private String username;
    private String password;
    private int age;
    private Date createTime;

    public int getUserno() {
        return userno;
    }

    public void setUserno(int userno) {
        this.userno = userno;
    }

    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 int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public Date getCreateTime() {
        return createTime;
    }

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

    @Override
    public String toString() {
        return "User{" +
                "userno=" + userno +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", age=" + age +
                ", createTime=" + createTime +
                '}';
    }
}

dao接口:

package hzq.mybatis.crud.dao;

import hzq.mybatis.crud.entity.User;

import java.util.List;

/**
 * Created by hzq on 2017/4/9.
 */
public interface IUserDao {
    /**
     * 查询所有
     * @return
     */
    public List<User> findAll();

    /**
     * 保存,并返回主键id(mysql id自增)
     * @param user
     * @return
     */
    public int save(User user);

    /**
     * 修改
     * @param user
     */
    public void update(User user);

    /**
     * 根据id删除
     * @param id
     */
    public  void delete(int id);


}

dao实现类:

package hzq.mybatis.crud.dao.impl;

import hzq.mybatis.crud.dao.IUserDao;
import hzq.mybatis.crud.entity.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 java.io.IOException;
import java.util.List;


/**
 * Created by hzq on 2017/4/9.
 */
public class UserDaoImpl implements IUserDao {
    private SqlSession sqlSession = this.getSqlSession();
    public List<User> findAll() {
        return sqlSession.selectList("UserMapper.findAll");
    }

    public int save(User user) {
        sqlSession.insert("UserMapper.save",user);
        sqlSession.commit();
        sqlSession.close();
        return user.getUserno();
    }

    public void update(User user) {
        sqlSession.update("UserMapper.update",user);
        sqlSession.commit();
        sqlSession.close();
    }

    public void delete(int id) {
        sqlSession.delete("UserMapper.deleteById",id);
        sqlSession.commit();
        sqlSession.close();
    }

    /**
     * 获取SqlSession
     * @return
     */
    public SqlSession getSqlSession(){
        String res = "mybatis-config.xml";
        SqlSessionFactory sqlSessionFactory = null;
        SqlSession sqlSession = null;
        try {
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsReader(res));
            sqlSession = sqlSessionFactory.openSession();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  sqlSession;
    }

}


Mapper映射文件:

<?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">
    <sql id="tableName">
        sys_user
    </sql>
    <sql id="column">
        userno,
        username,
        password,
        age,
        createTime
    </sql>
    <sql id="value" >
        #{userno},
        #{username},
        #{password},
        #{age},
        #{createTime}
    </sql>
    <select id="findAll" resultType="user">
        SELECT
        <include refid="column"/>
        FROM
        <include refid="tableName"/>
    </select>
    <!--
        useGeneratedKeys : 这会令 MyBatis 使用 JDBC 的 getGeneratedKeys 方法来取出由数据库内部生成的主键
        keyProperty : MyBatis 会通过 getGeneratedKeys 的返回值或者通过 insert 语句的 selectKey 子元素设置它的键值
    -->
    <insert id="save" parameterType="user" useGeneratedKeys="true" keyProperty="userno" >
        INSERT INTO
          <include refid="tableName"/>
        (
          <include refid="column"/>
        )VALUES (
           <include refid="value"/>
        )

    </insert>
    <update id="update" parameterType="user">
        UPDATE
        <include refid="tableName"/>
        SET
        username = #{username}
        WHERE
        userno = #{userno}
    </update>

    <delete id="deleteById" parameterType="int">
      DELETE  FROM
      <include refid="tableName"/>
      WHERE
        userno = #{1}
    </delete>
</mapper>


测试类:

package hzq.mybatis.crud;

import hzq.mybatis.crud.dao.IUserDao;
import hzq.mybatis.crud.dao.impl.UserDaoImpl;
import hzq.mybatis.crud.entity.User;
import org.junit.Test;
import java.util.Date;
import java.util.List;

/**
 * Created by hzq on 2017/4/9.
 */
public class CRUDTest {
    private IUserDao userDao = new UserDaoImpl();
    /**
     * select 查询
     */
    @Test
    public void select(){
        List<User> users  = userDao.findAll();
        for (User u : users){
            System.out.println(u);
        }

    }
    /**
     * insert 保存
     */
    @Test
    public void insert(){
        User user = new User();
        user.setAge(18);
        user.setCreateTime(new Date());
        user.setPassword("user1");
        user.setUsername("user1");
        int id = userDao.save(user);
        System.out.println("用户的id是:"+id);
    }
    /**
     * 修改
     */
    @Test
    public void update(){
        User user = new User();
        user.setUsername("user2");
        user.setUserno(1);
        userDao.update(user);
    }
    /**
     * 根据id删除
     */
    @Test
    public void delete(){
        int id = 1;
        userDao.delete(id);
    }
}

源码下载:http://download.csdn.net/detail/mmd0308/9808728

一个简单的MyBatis的CRUD案例完了,但是这里面还有很多不明白的地方,如Mapper文件中的Sql元素,获取参数的方式:#{1},#{userno}等等,带着这些疑问,我们在进一步研究MyBatis的XML映射文件中sql和参数。


相关文章:

  • IntelliJ IDEA 和 Eclipse 常用快捷键
  • 基于Maven环境进行Spring集成CXF WebService框架
  • 01 Mybatis整合Spring 由于版本引起的BUG
  • 01 shiro与spring集成
  • JAVA之自增自减运算符
  • JAVA之“==”和“equals”的区别
  • JAVA之equals对于引用类型比较的方式不同呢
  • JAVA之String,StringBuffer与StringBuilder三者之间的区别
  • JAVA之冒泡(Bubble)排序
  • JAVA之选择排序
  • JAVA之插入排序
  • JAVA之类,构造函数和构造代码块
  • JAVA面试题之冒泡排序,插入排序及选择排序
  • Linux安装JDK步骤
  • Linux之ssh,scp命令的使用
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【知识碎片】第三方登录弹窗效果
  • 2019.2.20 c++ 知识梳理
  • ES10 特性的完整指南
  • ES6系列(二)变量的解构赋值
  • Fastjson的基本使用方法大全
  • Java多线程(4):使用线程池执行定时任务
  • jquery ajax学习笔记
  • Python十分钟制作属于你自己的个性logo
  • vue脚手架vue-cli
  • vue数据传递--我有特殊的实现技巧
  • Webpack入门之遇到的那些坑,系列示例Demo
  • windows下使用nginx调试简介
  • 计算机常识 - 收藏集 - 掘金
  • 浏览器缓存机制分析
  • 前端学习笔记之观察者模式
  • 前言-如何学习区块链
  • 我的zsh配置, 2019最新方案
  • 学习笔记TF060:图像语音结合,看图说话
  • Hibernate主键生成策略及选择
  • Linux权限管理(week1_day5)--技术流ken
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​【已解决】npm install​卡主不动的情况
  • ​决定德拉瓦州地区版图的关键历史事件
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # 安徽锐锋科技IDMS系统简介
  • #[Composer学习笔记]Part1:安装composer并通过composer创建一个项目
  • #mysql 8.0 踩坑日记
  • $L^p$ 调和函数恒为零
  • (function(){})()的分步解析
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (接口自动化)Python3操作MySQL数据库
  • (三)模仿学习-Action数据的模仿
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (生成器)yield与(迭代器)generator
  • (万字长文)Spring的核心知识尽揽其中
  • (转)母版页和相对路径
  • . Flume面试题
  • .h头文件 .lib动态链接库文件 .dll 动态链接库