MyBatis学习总结(一)简单入门案例

主要内容:本文主要通过对数据库中的use表进行增删改查总结mybatis的环境搭建和基本入门使用

一、需要的jar包:

1、核心包

2、依赖包

3、jdbc数据库驱动(mysql为例)

二、配置文件

1、核心配置文件(SqlMapConfig.xml)

组成部分

1、数据连接和事务
  1. <!--和spring整合后该配置取消-->
  2. <environments default="development">
  3. <environment id="development">
  4. <!--使用jdbc事务管理-->
  5. <transactionManager type="JDBC" />
  6. <!--数据库连接-->
  7. <dataSource type="POOLED">
  8. <property name="driver" value="com.mysql.jdbc.Driver" />
  9. <property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8" />
  10. <property name="username" value="root" />
  11. <property name="password" value="root" />
  12. </dataSource>
  13. </environment>
  14. </environments>
2、配置映射文件
  1. <mappers>
  2. <mapper resource="com/mybatisTest/map/User.xml" />
  3. </mappers>

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. <mapper namespace="test">
  6. <!-- 根据id获取用户信息 -->
  7. <select id="findUserById" parameterType="int" resultType="com.mybatisTest.pojo.User">
  8. select * from user where id = #{id}
  9. </select>
  10. <!-- 根据username查询 -->
  11. <select id="findUserByUsername" parameterType="java.lang.String" resultType="com.mybatisTest.pojo.User">
  12. select * from user where username like '%${value}%' /*如果参数类型是简单数值类型,大括号中间必须value*/
  13. </select>
  14. <!-- 添加用戶 -->
  15. <insert id="insertUser" parameterType="com.mybatisTest.pojo.User">
  16. insert into user(username,birthday,sex,address,detail,score)
  17. values(#{username},#{birthday},#{sex},#{address},#{detail},#{score});
  18. </insert>
  19. <!-- 刪除用戶 -->
  20. <delete id="deleteUser" parameterType="com.mybatisTest.pojo.User">
  21. delete from user where id=#{id}
  22. </delete>
  23. <!-- 更新用戶 -->
  24. <update id="updateUser" parameterType="com.mybatisTest.pojo.User">
  25. update user set username=#{username},birthday=#{birthday},sex=#{sex},address=#{address},detail=#{detail},score=#{score}
  26. where id=#{id}
  27. </update>
  28. </mapper>

说明:

在这个配置文件的mappers 属性中有个namespace,他的作用是为了区分不同的sql组,相当于java中包的概念,对user的操作使用同一个namespace,对商品的操作使用同一个namespace,通常也可以将mapper文件的路径名作为namespace,也可以根据需求自定义,在后边测试类中,使用namespace.[sqlid]来执行对应的sql

三、测试类

  1. public class Demo01 {
  2. //定义会话工厂
  3. private SqlSessionFactory sqlSessionFactory;
  4. //创建会话
  5. @Before
  6. public void createSqlSessionFactory() throws Exception {
  7. //配置文件位置
  8. String resource = "SqlMapConfig.xml";
  9. //获取输入流
  10. InputStream inputStream = Resources.getResourceAsStream(resource);
  11. //创建SqlSessionFactory
  12. sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  13. }
  14. //根据用户id查询
  15. @Test
  16. public void testFindUserById(){
  17. //数据库会话实例
  18. SqlSession sqlSession = null;
  19. sqlSession = sqlSessionFactory.openSession();
  20. User user = sqlSession.selectOne("test.findUserById",1);
  21. System.out.println(""+user+"");
  22. sqlSession.close();
  23. }
  24. //根据用户名查询
  25. @Test
  26. public void testFindUserByUsername(){
  27. //数据库会话实例
  28. SqlSession sqlSession = null;
  29. sqlSession = sqlSessionFactory.openSession();
  30. List<User> list = sqlSession.selectList("test.findUserByUsername", "xu");
  31. for (User user:list) {
  32. System.out.println(user);
  33. }
  34. sqlSession.close();
  35. }
  36. //添加用户
  37. @Test
  38. public void insertUser(){
  39. //数据库会话实例
  40. SqlSession sqlSession = null;
  41. sqlSession = sqlSessionFactory.openSession();
  42. User user = new User();
  43. user.setUsername("徐杰");
  44. user.setAddress("山东德州");
  45. user.setDetail("1212");
  46. user.setScore(100f);
  47. user.setBirthday(new Date());
  48. sqlSession.insert("test.insertUser",user);
  49. //提交事务
  50. sqlSession.commit();
  51. sqlSession.close();
  52. }
  53. //删除用户
  54. @Test
  55. public void deleteUser(){
  56. //数据库会话实例
  57. SqlSession sqlSession = null;
  58. sqlSession = sqlSessionFactory.openSession();
  59. sqlSession.delete("com.mybatisTest.map.User.xml.deleteUser",3);
  60. //提交事务
  61. sqlSession.commit();
  62. sqlSession.close();
  63. }
  64. //更新用户
  65. @Test
  66. public void updateUser(){
  67. //数据库会话实例
  68. SqlSession sqlSession = null;
  69. sqlSession = sqlSessionFactory.openSession();
  70. User user = new User();
  71. user.setId(2);
  72. user.setUsername("xiaoming");
  73. user.setBirthday(new Date());
  74. user.setSex("女");
  75. user.setAddress("北京北京");
  76. user.setDetail("122121212");
  77. user.setScore(90f);
  78. sqlSession.update("user.updateUser",user);
  79. //提交事务
  80. sqlSession.commit();
  81. sqlSession.close();
  82. }
  83. }

四、映射文件中insert操作获取新增主键

1、使用数据库自带的自增方式:

说明:这个地方的获取主键,是将新增加记录的id自动赋值给新增加记录所对应的那个实体对象的id

,我们每次新增对象的时候,都是先new一个对象,然后将各种属性赋值,由于mysql主键设置是自增,所以无需设置id,但是新增完毕之后,如何让程序得到mysql自增的id就是这里要理解的地方,需要修改的是mybatis的mapper文件,具体修改配置如下:

user.xml:

  1. <!-- 添加用戶 -->
  2. <insert id="insertUser" parameterType="com.mybatisTest.pojo.User">
  3. <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  4. select LAST_INSERT_ID()
  5. </selectKey>
  6. insert into user(username,birthday,sex,address,detail,score)
  7. values(#{username},#{birthday},#{sex},#{address},#{detail},#{score});
  8. </insert>

打印新增加user的id

  1. //添加用户
  2. @Test
  3. public void insertUser(){
  4. //数据库会话实例
  5. SqlSession sqlSession = null;
  6. sqlSession = sqlSessionFactory.openSession();
  7. User user = new User();
  8. user.setUsername("沙悟净");
  9. user.setAddress("流沙河");
  10. user.setDetail("1212");
  11. user.setScore(100f);
  12. user.setBirthday(new Date());
  13. sqlSession.insert("user.insertUser", user);
  14. System.out.println("新增主键是:"+user.getId());
  15. //提交事务
  16. sqlSession.commit();
  17. sqlSession.close();
  18. }

2、使用uuid的方式:

说明:这种方式是在数据执行插入操作之前,先为插入对象设置一个uuid赋值给id,然后执行没具体配置如下:

user.xml:

  1. <!-- 添加用戶 -->
  2. <insert id="insertUser" parameterType="com.mybatisTest.pojo.User">
  3. <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
  4. select uuid()
  5. </selectKey>
  6. insert into user(id,username,birthday,sex,address,detail,score)
  7. values(#{id},#{username},#{birthday},#{sex},#{address},#{detail},#{score});
  8. </insert>

注意点:相对比使用数据库自增获取id的方法,使用uuid不仅需要更改标签< selectkey > 中的执行语句,返回类型,执行顺序,还有具体的sql也需要更改,使用自增获取的方式中sql不用写id,而uuid必须要加上id

MyBatis学习总结(一)简单入门案例的更多相关文章

  1. springcloud+eureka简单入门案例

    springcloud+eureka简单入门案例 一.服务提供者 直接提供服务,入门案例没有特别要设置的地方,注意下端口,由于要启动多个服务,可能会冲突 配置文件(src/main/resources ...

  2. Java开发学习(四十)----MyBatisPlus入门案例与简介

    一.入门案例 MybatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发.提供效率. SpringBoot它能快速构建Spring开发环境用以整合其他技术,使用起来 ...

  3. drools的简单入门案例

    一.背景 最近在学习规则引擎drools,此处简单记录一下drools的入门案例. 二.为什么要学习drools 假设我们存在如下场景: 在我们到商店购买衣服的时候,经常会发生这样的事情,购买1件不打 ...

  4. Java开发学习(十五)----AOP入门案例及其工作流程解析

    一.AOP简介 1.1 什么是AOP AOP(Aspect Oriented Programming)面向切面编程,一种编程范式,指导开发者如何组织程序结构. OOP(Object Oriented ...

  5. Java开发学习(二十三)----SpringMVC入门案例、工作流程解析及设置bean加载控制

    一.SpringMVC概述 SpringMVC是隶属于Spring框架的一部分,主要是用来进行Web开发,是对Servlet进行了封装.SpringMVC是处于Web层的框架,所以其主要的作用就是用来 ...

  6. mybatis学习笔记一(入门)

    昨天看了一下mybatis,学习了一下有很多东西还不懂,但是想把一些知道的记录一下,如有错误请大家多多指点. mybatis它是apche的一个开源项目,它以前的没名字并不是叫mybatis而是叫ib ...

  7. SpringMVC学习笔记之---简单入门

    SpringMVC简单入门 (一)什么是MVC设计模式 (1)model:模型数据,业务逻辑 (3)view:呈现模型,与用户进行交互 (3)controller:负责接收并处理请求,响应客户端 (二 ...

  8. MyBatis学习笔记(一)入门

    首先给大家推荐几个网页: http://blog.csdn.net/isea533/article/category/2092001    没事看看 - MyBatis工具:www.mybatis.t ...

  9. MyBatis学习总结_01_MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

随机推荐

  1. c#异步调用的几种方式

    首先,我们分析一下异步处理的环境 需要在当前线程中获取返回值 不需要在当前线程中获取返回值,但是仍然需要对返回值做处理对于第1中情况,还可以继续细分 在当前线程中启动线程T,然后继续执行当前线程中的其 ...

  2. Builder模式的思考(Effective Java)

    <Effective Java>(第2版)中第二条中提到:遇到多个构造器参数时要考虑用构建器.在复习static关键字和内部类时回头看了一下,这才明白了为什么要用静态内部类来做处理,这里记 ...

  3. lua table操作实例详解

    lua_gettable lua_getglobal(L, "mytable") <== push mytable lua_pushnumber(L, 1)        & ...

  4. fetch知识点汇总

    使用XHR发送一个json请求一般是这样: const xhr = new XMLHttpRequest() xhr.open('Get', url) xhr.responseType = 'json ...

  5. 已有模板与tp框架结合

    具体实现步骤: ①复制模板文件到view指定文件目录: ②复制css.js.img到view指定文件目录: ③把静态资源(css.js.img)文件的路径设置为“常量”信息(在index.php入口文 ...

  6. C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本系列,终 ...

  7. 简单了解enum

    enum的性质: 1.枚举类型的实例都是常量 2.要使用enum,需要创建一个该类型的引用,并将其赋值给某个实例 3.常用的方法:  *     toString():某个enum实例的名字  *   ...

  8. “核弹级”Android漏洞Janus,黑客可以任意篡改App

    美国时间12月9日,Google披露了一个名为"Janus"安卓漏洞.该漏洞可以让攻击者绕过安卓签名机制,从而让攻击者对App进行篡改,安卓5.0到8.0等个版本系统均受影响. 顶 ...

  9. 关于APIcloud中的登录与注册的简单实现

    1.apiclou实现页面的登录方式,不适用自带的登录. html代码 <div class="login_ipt_box"> <img class=" ...

  10. CSS的常见问题

    1.css的编码风格 多行式:可读性越强,但是CSS文件的行数过多,影响开发速度,增大CSS文件的大小 一行式:可读性稍差,有效减少CSS文件的行数,有利于提高开发速度,减小CSS文件的大小 2.id ...