Mybatis实现简单的增删改查

avatar 2017年08月10日19:08:23 1 2655 views
博主分享免费Java教学视频,B站账号:Java刘哥 ,长期提供技术问题解决、项目定制:本站商品点此

一、下载 Mybatis


下载地址:https://github.com/mybatis/mybatis-3/releases

1、首先下载 我们要用的 mybatis 的 jar 包 :mybatis-3.4.4.zip

解压,根目录就能看到我们要的 mybatisjar的 jar包:mybatis-3.4.4.jar

2、然后下载 再下载一个源码包 :Source code (zip)

其中 源码包中的  mybatis-3-mybatis-3.4.4\src\test\java\org\apache\ibatis\submitted\complex_property\Configuration.xml 是核心配置文件,我们拷走


二、项目准备


1、项目结构

① 新建 Java 项目

② 在 src 下新建 com.liuyanzhao.mybatis.po 包(用来放持久化类,和数据库对应)

和 com.liuyanzhao.mybatis.first 包 (用来放 CURD 实现代码)

③ 在 src 下新建(或者拷贝)Configuration.xml (mybatis核心配置文件)和 user.xml (映射文件)



2、导入 两个必备的 jar 包
  • mysql-jdbc 驱动包: mysql-connector-java-5.1.41-bin.jar
  • mybatis 包:mybatis-3.4.4.jar


在项目中新建一个 lib 目录,将两个包拷贝到 lib 中,然后将两个包加入环境(build path)中



3、新建数据库和数据表

我这里在本地测试,主机 localhost,数据库用户名root,密码为空

① 新建数据库:mybatis

② 新建数据表:user表

表结构如下,五个字段(id,username,gender,birthday,address)






三、代码实现


1、Configuration.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE configuration
  3.     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  4.     "http://mybatis.org/dtd/mybatis-3-config.dtd">
  5. <configuration>
  6.   <!-- 和Spring整合后,environments配置将废除-->
  7.   <environments default="development">
  8.     <environment id="development">
  9.       <!--使用JDBC事务管理,事务控制由mybatis-->
  10.       <transactionManager type="JDBC">
  11.         <property name="" value=""/>
  12.       </transactionManager>
  13.       <!--数据库连接池-->
  14.       <dataSource type="UNPOOLED">
  15.         <property name="driver" value="com.mysql.jdbc.Driver"/>
  16.         <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&amp;characterEncoding=utf8"/>
  17.         <property name="username" value="root"/>
  18.         <property name="password" value=""/>
  19.       </dataSource>
  20.     </environment>
  21.   </environments>
  22.   <!--加载映射文件-->
  23.   <mappers>
  24.     <mapper resource="user.xml" />
  25.   </mappers>
  26. </configuration>



2、user.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3.         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4.         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <!--namespace命名空间,作用是对sql进行分类话管理,理解sql,理解sql隔离
  6.     注意:使用mapper代理方法开发,namespace有着特殊的作用
  7. -->
  8. <mapper namespace="test">
  9.     <!--在映射文件中配置很多sql语句-->
  10.     <!--
  11.     id:表示映射文件中的sql
  12.     将sql语句封装到mappedStatement对象中,所以称id为Statement的id
  13.     parameterType:指定输入参数的类型
  14.     resultType:指定就是单条记录所映射的java对象类型
  15.     #{}表示占位符,相当于?
  16.     #{id} 其中id表示接受输入的参数,参数名就是id,如果输入的参数是简单类型,#{}中的参数可以任意,可以value或者其他名称
  17.     ${}:表示拼接sql串,将接受到的参数的内容不加任何修饰直接拼接在sql中
  18.     ${}安全隐患:使用${}拼接sql,引起sql注入
  19.     ${value}:接受输入参数的内容,如果传入类型是简单类型,${}中只有使用value
  20.     -->
  21.     <select id="findUserById" parameterType="int" resultType="com.liuyanzhao.mybatis.po.User">
  22.         SELECT * FROM user WHERE id=#{value}
  23.     </select>
  24.     <!--根据用户名称模糊查询,可能返回多条-->
  25.     <select id="findUserByName" parameterType="java.lang.String" resultType="com.liuyanzhao.mybatis.po.User">
  26.         SELECT * FROM user WHERE username LIKE '%${value}%'
  27.     </select>
  28.     <!--#{}指定pojo的属性名,接收到pojo对象的属性值,Mybatis通过OGNL获取对象的属性值-->
  29.     <!--添加用户-->
  30.     <insert id="insertUser" parameterType="com.liuyanzhao.mybatis.po.User">
  31.      <!--
  32.         将插入数据的主键返回,返回到user对象中
  33.         SELECT LAST_INSERT_ID(); 得到insert进去的主键值,只适用自增主键
  34.     -->
  35.         <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  36.             SELECT LAST_INSERT_ID()
  37.         </selectKey>
  38.         INSERT INTO user(username,birthday,gender,address) VALUE(#{username},#{birthday},#{gender},#{address})
  39.     </insert>
  40.     <!--删除用户,根据id-->
  41.     <delete id="deleteUserById" parameterType="java.lang.Integer">
  42.         DELETE FROM user WHERE id=#{id}
  43.     </delete>
  44.     <!--更新用户,根据id
  45.     需要传入用户信息
  46.     parameterType指定user对象,包括id和更新信息。注意:id必须存在
  47.     #{id}:从输入的user对象中获取id的属性值
  48.     -->
  49.     <update id="updateUserById" parameterType="com.liuyanzhao.mybatis.po.User">
  50.         UPDATE user SET username=#{username},birthday=#{birthday},gender=#{gender},address=#{address} WHERE id=#{id}
  51.     </update>
  52. </mapper>



3、User.java
  1. package com.liuyanzhao.mybatis.po;
  2. import java.util.Date;
  3. /**
  4.  * Created by 言曌 on 2017/8/10.
  5.  */
  6. public class User {
  7.     private int id; //编号
  8.     private String username; //用户名
  9.     private String gender; //性别
  10.     private Date birthday; //生日
  11.     private String address; //地址
  12.     public int getId() {
  13.         return id;
  14.     }
  15.     public void setId(int id) {
  16.         this.id = id;
  17.     }
  18.     public String getUsername() {
  19.         return username;
  20.     }
  21.     public void setUsername(String username) {
  22.         this.username = username;
  23.     }
  24.     public String getGender() {
  25.         return gender;
  26.     }
  27.     public void setGender(String gender) {
  28.         this.gender = gender;
  29.     }
  30.     public Date getBirthday() {
  31.         return birthday;
  32.     }
  33.     public void setBirthday(Date birthday) {
  34.         this.birthday = birthday;
  35.     }
  36.     public String getAddress() {
  37.         return address;
  38.     }
  39.     public void setAddress(String address) {
  40.         this.address = address;
  41.     }
  42.     @Override
  43.     public String toString() {
  44.         return "User{" +
  45.             "id=" + id +
  46.             ", username='" + username + '\'' +
  47.             ", gender='" + gender + '\'' +
  48.             ", birthday=" + birthday +
  49.             ", address='" + address + '\'' +
  50.             '}';
  51.     }
  52. }



4、MyBatisFirst.java
  1. package com.liuyanzhao.mybatis.first;
  2. import com.liuyanzhao.mybatis.po.User;
  3. import org.apache.ibatis.io.Resources;
  4. import org.apache.ibatis.session.SqlSession;
  5. import org.apache.ibatis.session.SqlSessionFactory;
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  7. import org.junit.Test;
  8. import java.io.IOException;
  9. import java.io.InputStream;
  10. import java.util.Date;
  11. import java.util.List;
  12. /**
  13.  * Created by 言曌 on 2017/8/10.
  14.  */
  15. public class MyBatisFirst {
  16.     //根据id查询用户信息,得到一条记录的结果
  17.     @Test
  18.     public void findUserByIdTest() throws IOException {
  19.         //myatis配置文件
  20.         String resource = "Configuration.xml";
  21.         //得到配置文件流
  22.          InputStream inputStream =  Resources.getResourceAsStream(resource);
  23.         //创建会话工厂
  24.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  25.         //通过工厂得到SqlSession
  26.         SqlSession sqlSession = sqlSessionFactory.openSession();
  27.         //通过SqlSession操作数据库
  28.         //selectOne:查询一条记录
  29.         //第一个参数:映射文件中statement的id,等于=namespace+"."+statement的id
  30.         //第二个参数:指定和映射文件中所匹配的parameterType类型参数
  31.         User user = sqlSession.selectOne("test.findUserById",1);
  32.         System.out.println(user.toString());
  33.         sqlSession.close();
  34.     }
  35.     //根据用户名称模糊查询,得到多条记录
  36.     @Test
  37.     public void findUserByName() throws IOException {
  38.         //myatis配置文件
  39.         String resource = "Configuration.xml";
  40.         //得到配置文件流
  41.         InputStream inputStream =  Resources.getResourceAsStream(resource);
  42.         //创建会话工厂
  43.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  44.         //通过工厂得到SqlSession
  45.         SqlSession sqlSession = sqlSessionFactory.openSession();
  46.         //list中的user和映射文件中resultType所指定的类型一致
  47.         List<User> list = sqlSession.selectList("test.findUserByName","明");
  48.         System.out.println(list);
  49.         //关闭 sqlSession
  50.         sqlSession.close();
  51.     }
  52.     //添加用户
  53.     @Test
  54.     public void insertUser() throws IOException {
  55.         //myatis配置文件
  56.         String resource = "Configuration.xml";
  57.         //得到配置文件流
  58.         InputStream inputStream =  Resources.getResourceAsStream(resource);
  59.         //创建会话工厂
  60.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  61.         //通过工厂得到SqlSession
  62.         SqlSession sqlSession = sqlSessionFactory.openSession();
  63.         //插入用户对象
  64.         User user = new User();
  65.         user.setUsername("杜小甫");
  66.         user.setBirthday(new Date());
  67.         user.setGender("男");
  68.         user.setAddress("河南巩义");
  69.         sqlSession.insert("test.insertUser",user);
  70.         //获取用户id
  71.         //如果不配置自增主键返回,将得不到id,而是默认的0
  72.         System.out.println(user.getId());
  73.         //提交事务
  74.         sqlSession.commit();
  75.         //关闭 sqlSession
  76.         sqlSession.close();
  77.     }
  78.     //删除用户
  79.     @Test
  80.     public void deleteUserById() throws IOException {
  81.         //myatis配置文件
  82.         String resource = "Configuration.xml";
  83.         //得到配置文件流
  84.         InputStream inputStream =  Resources.getResourceAsStream(resource);
  85.         //创建会话工厂
  86.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  87.         //通过工厂得到SqlSession
  88.         SqlSession sqlSession = sqlSessionFactory.openSession();
  89.         //传入id,删除用户
  90.         sqlSession.delete("test.deleteUserById",6);
  91.         //提交事务
  92.         sqlSession.commit();
  93.         //关闭 sqlSession
  94.         sqlSession.close();
  95.     }
  96.     //更新用户
  97.     @Test
  98.     public void updateUserById() throws IOException {
  99.         //myatis配置文件
  100.         String resource = "Configuration.xml";
  101.         //得到配置文件流
  102.         InputStream inputStream =  Resources.getResourceAsStream(resource);
  103.         //创建会话工厂
  104.         SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  105.         //通过工厂得到SqlSession
  106.         SqlSession sqlSession = sqlSessionFactory.openSession();
  107.         //更新用户信息
  108.         User user = new User();
  109.         user.setId(7);
  110.         user.setUsername("张小雅");
  111.         user.setBirthday(new Date());
  112.         user.setGender("女");
  113.         user.setAddress("哈尔滨");
  114.         //传入对象
  115.         sqlSession.update("test.updateUserById",user);
  116.         //提交事务
  117.         sqlSession.commit();
  118.         //关闭 sqlSession
  119.         sqlSession.close();
  120.     }
  121. }



本文链接:https://liuyanzhao.com/5762.html
  • 微信
  • 交流学习,资料分享
  • weinxin
  • 个人淘宝
  • 店铺名:言曌博客咨询部

  • (部分商品未及时上架淘宝)
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0