Mybatis接口编程方式实现增删改查

        林炳文Evankaka原创作品。转自https://blog.csdn.net/Evankaka/article/details/45670527

    前面一章【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 ,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句:

session.selectOne("com.mucfc.model.EmployeerMapper.findEmployeerByID", 1);
     
     
     
     

其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如EmployeerMapper.java),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:

本文要改成以接口类来实现增删改查

整个工程目录 :


本文示例工程免费下载

1、首先还是mybatis的配置文件mybatis-config.xml


     
     
     
     
  1. xml version="1.0" encoding="UTF-8" ?>
  2. PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">
  4. <configuration>
  5. <properties resource="mysql.properties" />
  6. <typeAliases>
  7. <typeAlias alias="Employeer" type="com.mucfc.model.Employeer" />
  8. typeAliases>
  9. <environments default="development">
  10. <environment id="development">
  11. <transactionManager type="JDBC" />
  12. <dataSource type="POOLED">
  13. <property name="driver" value="${driver}" />
  14. <property name="url" value="${url}" />
  15. <property name="username" value="${username}" />
  16. <property name="password" value="${password}" />
  17. dataSource>
  18. environment>
  19. environments>
  20. <mappers>
  21. <mapper resource="com/mucfc/model/Employeer.xml" />
  22. mappers>
  23. configuration>

其中配置文件mysql.properties


     
     
     
     
  1. driver=com.mysql.jdbc.Driver
  2. url=jdbc:mysql://localhost:3306/test?charset=utf8
  3. username=root
  4. password=christmas258@


2、数据表对应的类Employeer.JAVA


     
     
     
     
  1. package com.mucfc.model;
  2. import java.io.Serializable;
  3. /**
  4. * 雇员信息类
  5. *@author linbingwen
  6. *@time 2015.5.11
  7. */
  8. public class Employeer {
  9. private Integer employeer_id;
  10. private String employeer_name;
  11. private Integer employeer_age ;
  12. private String employeer_department;
  13. private String employeer_worktype;
  14. public Employeer() {
  15. super();
  16. }
  17. public Integer getEmployeer_id() {
  18. return employeer_id;
  19. }
  20. public void setEmployeer_id(Integer employeer_id) {
  21. this.employeer_id = employeer_id;
  22. }
  23. public String getEmployeer_name() {
  24. return employeer_name;
  25. }
  26. public void setEmployeer_name(String employeer_name) {
  27. this.employeer_name = employeer_name;
  28. }
  29. public Integer getEmployeer_age() {
  30. return employeer_age;
  31. }
  32. public void setEmployeer_age(Integer employeer_age) {
  33. this.employeer_age = employeer_age;
  34. }
  35. public String getEmployeer_department() {
  36. return employeer_department;
  37. }
  38. public void setEmployeer_department(String employeer_department) {
  39. this.employeer_department = employeer_department;
  40. }
  41. public String getEmployeer_worktype() {
  42. return employeer_worktype;
  43. }
  44. public void setEmployeer_worktype(String employeer_worktype) {
  45. this.employeer_worktype = employeer_worktype;
  46. }
  47. @Override
  48. public String toString() {
  49. return "Employeer [employeer_id=" + employeer_id + ", employeer_name="
  50. + employeer_name + ", employeer_age=" + employeer_age
  51. + ", employeer_department=" + employeer_department
  52. + ", employeer_worktype=" + employeer_worktype + "]";
  53. }
  54. }
然后是SQL语句的配置Employeer.xml:


     
     
     
     
  1. xml version="1.0" encoding="UTF-8" ?>
  2. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  3. <mapper namespace="com.mucfc.mapper.EmployeerMapper">
  4. <select id="findEmployeerByID" parameterType="int" resultType="Employeer">
  5. select* from `t_employeer` where employeer_id =#{employeer_id}
  6. select>
  7. <insert id="addEmployeer" parameterType="Employeer"
  8. useGeneratedKeys= "true" keyProperty= "employeer_id">
  9. insert into `t_employeer`(employeer_name,employeer_age,employeer_department,employeer_worktype)
  10. values(#{employeer_name},#{employeer_age},#{employeer_department},#{employeer_worktype})
  11. insert>
  12. <delete id="deleteEmployeer" parameterType="int">
  13. delete from `t_employeer` where employeer_id = #{employeer_id}
  14. delete>
  15. <update id="updateEmployeer" parameterType="Employeer">
  16. update t_employeer set employeer_name = #{employeer_name},employeer_age= #{employeer_age},employeer_department = #{employeer_department}
  17. ,employeer_worktype=#{employeer_worktype} where employeer_id = #{employeer_id}
  18. update>
  19. mapper>

注意com.mucfc.mapper.EmployeerMapper这个类是存在的,它是一个接口类,上一讲我们是使用 com.mucfc.model.EmployeerMapper,而上一讲的这个类是不存在的

4、SQL语句映射类EmployeerMapper.java


     
     
     
     
  1. package com.mucfc.mapper;
  2. import com.mucfc.model.Employeer;
  3. /**
  4. * SQL语句映射类
  5. * @author linbingwen
  6. * @time 2015.5.11
  7. */
  8. public interface EmployeerMapper {
  9. /**
  10. * 注意要和Employeer.xml的方法名对应
  11. */
  12. public Employeer findEmployeerByID(int id);
  13. /**
  14. * 注意要和Employeer.xml的方法名对应
  15. */
  16. public void addEmployeer(Employeer employeer);
  17. /**
  18. * 注意要和Employeer.xml的方法名对应
  19. */
  20. public void deleteEmployeer(int id);
  21. /**
  22. * 注意要和Employeer.xml的方法名对应
  23. */
  24. public void updateEmployeer(Employeer employeer);
  25. }
5、测试:


(1)增加命令

上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:


     
     
     
     
  1. /**
  2. * 增加
  3. */
  4. public static void addEmployeer(Employeer employeer){
  5. SqlSession session = null;
  6. try {
  7. session = sqlSessionFactory.openSession();
  8. //返回值是记录条数
  9. int resultCount = session.insert( "com.mucfc.model.EmployeerMapper.addEmployeer", employeer );
  10. System.out.printf( "当前插入的employeer_id :%d 当前插入数据库中条数:%d " , employeer.getEmployeer_id() ,resultCount); //获取插入对象的id
  11. System.out.println( "");
  12. session.commit() ;
  13. } finally {
  14. session.close();
  15. }
  16. }


改成以接口编程的方式:


     
     
     
     
  1. /**
  2. * 增加
  3. */
  4. public static void addEmployeer(Employeer employeer){
  5. SqlSession session = null;
  6. try {
  7. session = sqlSessionFactory.openSession();
  8. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  9. employeerMapper.addEmployeer(employeer);
  10. session.commit() ;
  11. } finally {
  12. session.close();
  13. }
  14. }

(2)删除命令

上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:


     
     
     
     
  1. /**
  2. * 删除
  3. *
  4. */
  5. public static void deleteEmployeer(int id){
  6. SqlSession session = null;
  7. try {
  8. session = sqlSessionFactory.openSession();
  9. //返回值是记录条数
  10. int resultCount=session.delete( "com.mucfc.model.EmployeerMapper.deleteEmployeer",id);
  11. System.out.println( "当前删除数据库中条数: "+resultCount); //获取插入对象的id
  12. session.commit() ;
  13. } finally {
  14. session.close();
  15. }
  16. }


改成以接口编程的方式:


     
     
     
     
  1. /**
  2. * 删除
  3. *
  4. */
  5. public static void deleteEmployeer(int id){
  6. SqlSession session = null;
  7. try {
  8. session = sqlSessionFactory.openSession();
  9. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  10. employeerMapper.deleteEmployeer(id);
  11. session.commit() ;
  12. } finally {
  13. session.close();
  14. }
  15. }


(3)查找命令

上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:


     
     
     
     
  1. /**
  2. * 查找
  3. */
  4. public static void findEmployeerById(int id) {
  5. SqlSession session = null;
  6. try {
  7. session = sqlSessionFactory.openSession();
  8. Employeer employeer = (Employeer) session.selectOne(
  9. "com.mucfc.model.EmployeerMapper.findEmployeerByID", 1);
  10. if (employeer == null)
  11. System.out.println( "null");
  12. else
  13. System.out.println(employeer);
  14. } finally {
  15. session.close();
  16. }
  17. }


改成以接口编程的方式:


     
     
     
     
  1. /**
  2. * 查找
  3. */
  4. public static void findEmployeerById(int id) {
  5. SqlSession session = null;
  6. try {
  7. session = sqlSessionFactory.openSession();
  8. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  9. Employeer employeer=employeerMapper.findEmployeerByID(id);
  10. if (employeer == null)
  11. System.out.println( "null");
  12. else
  13. System.out.println(employeer);
  14. } finally {
  15. session.close();
  16. }
  17. }

(4)修改命令

上一讲【Mybatis】Mybatis入门概述及第一个Mybatis实例实现增删改查 中的方式:


     
     
     
     
  1. /**
  2. * 更改
  3. */
  4. public static void updateEmployeer(Employeer employeer){
  5. SqlSession session = null;
  6. try {
  7. session = sqlSessionFactory.openSession();
  8. session.update( "com.mucfc.model.EmployeerMapper.updateEmployeer",employeer);
  9. session.commit() ;
  10. } finally {
  11. session.close();
  12. }
  13. }


改成以接口编程的方式:


     
     
     
     
  1. /**
  2. * 更改
  3. */
  4. public static void updateEmployeer(Employeer employeer){
  5. SqlSession session = null;
  6. try {
  7. session = sqlSessionFactory.openSession();
  8. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  9. employeerMapper.updateEmployeer(employeer);
  10. session.commit() ;
  11. } finally {
  12. session.close();
  13. }
  14. }

这是一个完整的测试:


     
     
     
     
  1. package com.mucfc.test;
  2. import java.io.IOException;
  3. import java.io.Reader;
  4. import org.apache.ibatis.io.Resources;
  5. import org.apache.ibatis.session.SqlSession;
  6. import org.apache.ibatis.session.SqlSessionFactory;
  7. import org.apache.ibatis.session.SqlSessionFactoryBuilder;
  8. import com.mucfc.mapper.EmployeerMapper;
  9. import com.mucfc.model.Employeer;
  10. public class MybatisTest {
  11. private static SqlSessionFactory sqlSessionFactory;
  12. private static Reader reader;
  13. static {
  14. try {
  15. reader = Resources.getResourceAsReader( "mybatis-config.xml");
  16. sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. /**
  22. * 查找
  23. */
  24. public static void findEmployeerById(int id) {
  25. SqlSession session = null;
  26. try {
  27. session = sqlSessionFactory.openSession();
  28. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  29. Employeer employeer=employeerMapper.findEmployeerByID(id);
  30. if (employeer == null)
  31. System.out.println( "null");
  32. else
  33. System.out.println(employeer);
  34. } finally {
  35. session.close();
  36. }
  37. }
  38. /**
  39. * 增加
  40. */
  41. public static void addEmployeer(Employeer employeer){
  42. SqlSession session = null;
  43. try {
  44. session = sqlSessionFactory.openSession();
  45. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  46. employeerMapper.addEmployeer(employeer);
  47. session.commit() ;
  48. } finally {
  49. session.close();
  50. }
  51. }
  52. /**
  53. * 删除
  54. *
  55. */
  56. public static void deleteEmployeer(int id){
  57. SqlSession session = null;
  58. try {
  59. session = sqlSessionFactory.openSession();
  60. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  61. employeerMapper.deleteEmployeer(id);
  62. session.commit() ;
  63. } finally {
  64. session.close();
  65. }
  66. }
  67. /**
  68. * 更改
  69. */
  70. public static void updateEmployeer(Employeer employeer){
  71. SqlSession session = null;
  72. try {
  73. session = sqlSessionFactory.openSession();
  74. EmployeerMapper employeerMapper=session.getMapper(EmployeerMapper.class);
  75. employeerMapper.updateEmployeer(employeer);
  76. session.commit() ;
  77. } finally {
  78. session.close();
  79. }
  80. }
  81. public static void main(String[] args) {
  82. Employeer employeer1= new Employeer();
  83. employeer1.setEmployeer_name( "李四");
  84. employeer1.setEmployeer_age( 23);
  85. employeer1.setEmployeer_department( "产品一部");
  86. employeer1.setEmployeer_worktype( "开发工程师");
  87. Employeer employeer2= new Employeer();
  88. employeer2.setEmployeer_name( "张三");
  89. employeer2.setEmployeer_age( 30);
  90. employeer2.setEmployeer_department( "产品二部");
  91. employeer2.setEmployeer_worktype( "测试工程师");
  92. Employeer employeer3= new Employeer();
  93. employeer3.setEmployeer_name( "小王");
  94. employeer3.setEmployeer_age( 22);
  95. employeer3.setEmployeer_department( "产品三部");
  96. employeer3.setEmployeer_worktype( "数据分析师");
  97. Employeer employeer4= new Employeer();
  98. employeer4.setEmployeer_name( "明明");
  99. employeer4.setEmployeer_age( 22);
  100. employeer4.setEmployeer_department( "财会部");
  101. employeer4.setEmployeer_worktype( "财务人员");
  102. //插入
  103. addEmployeer(employeer1);
  104. addEmployeer(employeer2);
  105. addEmployeer(employeer3);
  106. addEmployeer(employeer4);
  107. findEmployeerById( 26);
  108. deleteEmployeer( 27);
  109. //更改
  110. employeer2.setEmployeer_id( 28);
  111. employeer2.setEmployeer_age( 21);
  112. employeer2.setEmployeer_department( "产品四部");
  113. updateEmployeer(employeer2);
  114. }
  115. }

测试结果:

插入了4条数据,ID为25~28

然后27号被删除

29号被修改


本文示例工程免费下载

你可能感兴趣的:(Mybatis,Mybatis)