代码不能直接copy运行,有些内容是为了说明知识点

1,sqlMqpConfig.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.  
  6. <configuration>
  7.  
  8. <!-- 引入外部属性文件 -->
  9. <properties resource="jdbc.properties" />
  10.  
  11. <environments default="development">
  12. <environment id="development">
  13. <transactionManager type="JDBC" />
  14. <dataSource type="POOLED">
  15. <property name="driver" value="${jdbc.driverClassName}"/>
  16. <property name="url" value="${jdbc.url}"/>
  17. <property name="username" value="${jdbc.username}"/>
  18. <property name="password" value="${jdbc.password}"/>
  19. </dataSource>
  20.  
  21. <!--
  22. <dataSource type="POOLED">
  23. <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
  24. <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
  25. <property name="username" value="scott"/>
  26. <property name="password" value="tiger"/>
  27. </dataSource>
  28. -->
  29. </environment>
  30. </environments>
  31.  
  32. <!-- 指定映射文件或映射类 -->
  33. <mappers>
  34. <mapper resource="sqlMap/emp.xml"/>
  35. </mappers>
  36.  
  37. </configuration>

2,log4j.properties

  1. #在开发环境下,日志级别要设置成DEBUG,生产环境设置成info或error
  2. log4j.rootLogger=DEBUG, stdout
  3.  
  4. #Console output...
  5. log4j.appender.stdout=org.apache.log4j.ConsoleAppender
  6. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
  7. log4j.appender.stdout.layout.ConversionPattern=%d{HH:mm:ss,SSS} [%c] - %m%n

3, jdbc.properties

  1. jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
  2. jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:orcl
  3. jdbc.username=scott
  4. jdbc.password=tiger

4, Emp.java

  1. package com.mybatis.entity;
  2.  
  3. public class Emp {
  4.  
  5. private String ename;
  6.  
  7. private int empno;
  8.  
  9. private String job;
  10.  
  11. public String getEname() {
  12. return ename;
  13. }
  14.  
  15. public void setEname(String ename) {
  16. this.ename = ename;
  17. }
  18.  
  19. @Override
  20. public String toString(){
  21. return "Emp [ ename = " + ename + "; empno = " + empno + "]";
  22.  
  23. }
  24.  
  25. public Emp(int empno, String ename, String job){
  26.  
  27. super();
  28. this.empno = empno;
  29. this.ename = ename;
  30. this.job = job;
  31. }
  32.  
  33. public int getEmpno() {
  34. return empno;
  35. }
  36.  
  37. public void setEmpno(int empno) {
  38. this.empno = empno;
  39. }
  40.  
  41. public String getJob() {
  42. return job;
  43. }
  44.  
  45. public void setJob(String job) {
  46. this.job = job;
  47. }
  48. }

5, emp.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.  
  6. <mapper namespace="test">
  7.  
  8. <!-- #{id}如果传入参数是简单类型,名称任意 -->
  9. <!-- ${}表示拼接字符串,将接收到的参数内容不加修饰拼接到sql中
  10. 会引起sql注入
  11. ${value}:接收输入参数内容,如果是简单类型,只能使用${value}
  12. -->
  13. <select id="findEmpByEmpNo" parameterType="int" resultType="com.mybatis.entity.Emp">
  14. select * from emp where empno =#{empno}
  15. </select>
  16.  
  17. <select id="findEmpByJob" parameterType="java.lang.String" resultType="com.mybatis.entity.Emp">
  18. select ename from emp where job =#{job}
  19. </select>
  20.  
  21. <!-- 模糊查询 -->
  22. <select id="findByName" parameterType="java.lang.String", resultType="com.mybatis.entity.Emp">
  23. select * from emp where empno like '%${value}%'
  24. </select>
  25.  
  26. <!-- 输入类型参数是pojo,mybatis通过OGNL获取对象属性值
  27. //比如java中:System.out.println(emp.getID());
  28. // 检索时提交事务
  29. //sqlSession.commit();
  30. -->
  31. <insert id="save" parameterType="com.mybatis.entity.Emp">
  32. <!-- 将插入数据的主键返回(比如自增主键时),返回到user对象中
  33. SELECT LAST_INSERT_ID():得到insert进去记录的主键值,只适用于自增主键
  34. 注:单独使用时返回0
  35. keyProperty:将查询到的主键值设置到parameterType指定的对象的那个属性中
  36. order:SELECT LAST_INSERT_ID()执行顺序,相对于insert语句来说
  37. -->
  38. <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
  39. SELECT LAST_INSERT_ID()
  40. </selectKey>
  41.  
  42. <!-- 使用mysql的uuid()函数生成主键
  43. 执行过程:先使用uuid()获得主键,再将主键设置到user对象的id中
  44. 其次在insert执行时,从user对象中取得id属性
  45. -->
  46.  
  47. <selectKey keyProperty="id" order="BEFORE" resultType="java.lang.String">
  48. SELECT UUID()
  49. </selectKey>
  50. 《此时需要传入id
  51. insert into emp(id,empno,ename,job) values (#{id},#{empno},#{ename},#{job})
  52. insert into emp(empno,ename,job) values (#{empno},#{ename},#{job})
  53. </insert>
  54.  
  55. <update id="update" parameterType="com.mybatis.entity.Emp">
  56. update emp set ename=#{ename} where empno=#{empno}
  57. </update>
  58.  
  59. <delete id="delete" parameterType="int">
  60. delete from emp where empno=#{empno}
  61. </delete>
  62.  
  63. </mapper>

6, MybatisService.java

  1. public class MybatisService {
  2.  
  3. @Test
  4. public void findEmpByJobTest(){
  5.  
  6. //mybatis 配置文件
  7. String resource = "SqlMapConfig.xml";
  8. InputStream inputStream = null;
  9. SqlSession sqlSession = null;
  10.  
  11. try {
  12. // 使用MyBatis提供的Resources类加载myBatis的配置文件(它也加载相关联的映射文件)
  13. inputStream = Resources.getResourceAsStream(resource);
  14.  
  15. //构建sqlSession工厂
  16. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
  17. // 创建能执行映射文件中sql的sqlSession
  18. sqlSession = sqlSessionFactory.openSession();
  19.  
  20. // Emp emp = sqlSession.selectOne("test.findEmpByEmpNo", 7369);
  21. List<Emp> emp = sqlSession.selectList("test.findEmpByJob", "CLERK");
  22. //System.out.println(emp.toString());
  23.  
  24. // 更新时时提交事务
  25. //sqlSession.insert("test.save", emp);
  26. //sqlSession.commit();
  27. //System.out.println(emp.getID());
  28.  
  29. System.out.println(emp);
  30.  
  31. } catch (IOException e) {
  32. // TODO Auto-generated catch block
  33. e.printStackTrace();
  34. } finally {
  35. if (sqlSession != null) {
  36. sqlSession.close();
  37. }
  38. if (inputStream != null) {
  39. try {
  40. inputStream.close();
  41. } catch (IOException e) {
  42. // TODO Auto-generated catch block
  43. e.printStackTrace();
  44. }
  45. }
  46. }
  47. }
  48.  
  49. }

7, 另外

非自增主键返回(使用uuid)
使用mysql的uuid()函数生成主键,需要修改表中id类型为String
执行思路:
先通过uuid查到主键,将主键输入到insert语句中
执行uuid语句顺序在insert前

mybatis小结-001的更多相关文章

  1. Spring整合MyBatis小结

    MyBatis在Spring中的配置 我们在Spring中写项目需要运用到数据库时,现在一般用的是MyBatis的框架来帮助我们书写代码,但是学习了SSM就要知道M指的就是MyBatis,在此,在Sp ...

  2. mybatis小结

    mybatis是Apache的一个开源项目ibatis,后由Google管理,目前在github上.MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架. 一.mybatis解决 ...

  3. Java Persistence with MyBatis 小结3

    1 映射器配置文件和映射器接口 在 com.mybatis3.mappers 包中的 StudentMapper.xml 配置文件内,是如何配置 id 为”findStudentById”的 SQL ...

  4. Java Persistence with MyBatis 小结2

    MyBatis 最关键的组成部分是 SqlSessionFactory,我们可以从中获取 SqlSession,并执行映射的 SQL 语句.SqlSessionFactory 对象可以通过基于 XML ...

  5. Java Persistence with MyBatis 小结1

    数据持久层做的工作是1)将从数据库中查询到的数据生成需要的java对象:2)将 Java 对象中的数据通过 SQL 持久化到数据库中. MyBatis 通过抽象底层的 JDBC 代码,自动化 SQL ...

  6. mybatis 小结

    1.  根据后台list 在SQL中使用到In的时候 <if test="sbidList != null and sbidList.size() > 0"> A ...

  7. rem自适应布局小结001

    在最近的移动端布局当中,最炙手可热的方式便是使用rem进行元素的布局.以下便是从最近的文章中所总结出来的一点东西. 首先,我们必须有以下的疑问: rem的本质是什么? rem如何实现自适应布局? 如何 ...

  8. 图解Mybatis框架原理及使用

    1.前言 努力学习完ssm框架之后,终于也成功的把三大框架的使用以及配置文件细节忘得一干二净.为了努力捡起来以及方便今后的复习,决定写一篇博客记录一下. 本博客的所有分析都是在持久层接口以及接口中的方 ...

  9. Dance In Heap(二):一些堆利用的方法(上)

    0×00 前面的话 在前面的文章里我们稍微有点啰嗦的讲解了堆中的一些细节,包括malloc.free的详细过程,以及一些检查保护机制,那在这篇文章里,我们就开始结合这些机制,以64位为例来看一看如何对 ...

随机推荐

  1. Python学习手册之正则表达式和元字符

    在上一篇文章中,我们介绍了 Python 的数据封装.类方法.静态方法和属性函数,现在我们介绍 Python 的正则表达式和元字符.查看上一篇文章请点击:https://www.cnblogs.com ...

  2. golang区块链开发的视频教程推荐

    目前网上关于golang区块链开发的资源很少,以太坊智能合约相关的课程倒是很多,可能是由于前者的难度比后者难度大,课程开发需要投入更多精力.搜了一圈之后没结果,我就直接去之前没覆盖的视频网站找资源,包 ...

  3. ssm中需要注意的问题

    1.在controller中需要加注解 @Controller @RequestMapping("url") @Autowired private CardService card ...

  4. 长沙Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. SpringBoot学习:整合Redis

    项目下载地址:http://download.csdn.NET/detail/aqsunkai/9805821 pom.xml添加对redis的依赖: <!-- https://mvnrepos ...

  6. andriod 学习三 使用android资源

    3.1 android框架中有许多资源,包括布局,字符串,位图,图片....,使用资源之前需要在相应的资源文件中定义资源,然后编译程序时ADT将定义的资源转换成java类并给予唯一的id,而代码中需要 ...

  7. JS中String对象常用的方法

    1.  stringObject.charAt(index) 参数:index 必需,即字符在字符串中的下标.  返回值:   返回在指定位置的字符.返回的字符是长度为 1的字符串.(length属性 ...

  8. 第四十篇 Python之设计模式总结-简单工厂、工厂方法、抽象工厂、单例模式

    一. 简单工厂 简单工厂模式(Simple Factory Pattern):是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类. 简单工厂的用处不大,主要就是一个if... ...

  9. 微信小程序 选项 、时间日期选择器

    wxml: <view class="section" > <picker bindchange="bindPickerChange" val ...

  10. 「雅礼集训 2017 Day1」市场 (线段树除法,区间最小,区间查询)

    老师说,你们暴力求除法也整不了多少次就归一了,暴力就好了(应该只有log(n)次) 于是暴力啊暴力,结果我归天了. 好吧,在各种题解的摧残下,我终于出了一篇巨好看(chou lou)代码(很多结构体党 ...