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

来源:互联网 发布:unity5和unity3d差别 编辑:程序博客网 时间:2024/06/05 14:42

前面 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=utf8driver:com.mysql.jdbc.Driverusername:rootpassword: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,Alog4j.addivity.org.apache=falselog4j.appender.CONSOLE=org.apache.log4j.ConsoleAppenderlog4j.appender.CONSOLE.Threshold=DEBUGlog4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss} -%-4r [%t] %-5p  %x - %m%nlog4j.appender.CONSOLE.Target=System.outlog4j.appender.CONSOLE.Encoding=gbklog4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayoutlog4j.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和参数。


2 0
原创粉丝点击