geek的技术日志,记录每一次技术思考的闪光点。

Mybatis增删改查实例

Mybatis增删改查实例

 编写一个简单的mybatis进行插入数据的实例

1 数据库建表  其中建表dob=Date of Birth 的意思

  1. create table students  
  2.  (stud_id number primary key,    
  3.  name varchar2(20),  
  4.  email varchar2(20),  
  5.  dob date  
  6.  );  

Oracle数据库中出现表已创建,则表示创建成功,如果出现名称已被使用,则可在建表之前进行删除操作:drop table students;或者进行级联删除drop table students cascade constraints;然后再重新创建

2 新建一个项目

  2.1 创建好相应的package及class,其中Student是我们要进行插入的对象,由于数据类型和数据库中的值进行了对应,因此我们能够进行将一整个对象进行插入,因此我们使用pojo类进行封装对象

  1. package com.mybatis.pojo;  
  2. import java.util.Date;  
  3. public class Student {  
  4.     private Integer studId;  
  5.     private String name;  
  6.     private String email;  
  7.     private Date dob;  
  8.     public Student() {}//注意无参的构造器  
  9.     public Student(Integer studId, String name, String email, Date dob) {  
  10.         this.studId = studId;  
  11.         this.name = name;  
  12.         this.email = email;  
  13.         this.dob = dob;  
  14.     }  
  15.     public Integer getStudId() {  
  16.         return studId;  
  17.     }  
  18.     public void setStudId(Integer studId) {  
  19.         this.studId = studId;  
  20.     }  
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.     public void setName(String name) {  
  25.         this.name = name;  
  26.     }  
  27.     public String getEmail() {  
  28.         return email;  
  29.     }  
  30.     public void setEmail(String email) {  
  31.         this.email = email;  
  32.     }  
  33.     public Date getDob() {  
  34.         return dob;  
  35.     }  
  36.     public void setDob(Date dob) {  
  37.         this.dob = dob;  
  38.     }  
  39.     @Override  
  40.     public String toString() {  
  41.         return “Student [studId=” + studId + “, name=” + name + “, email=”  
  42.                 + email + “, dob=” + dob + “]”;  
  43.     }  
  44. }  

3 项目中引入mybatis的核心包以及可选的依赖包

   文件下载:mybatis包下载

   最新版下载:https://github.com/mybatis/mybatis-3/releases

     必须的包  mybatis-3.3.0.jar    ojdbc14.jar
     可选的包  junit-4.7.jar        log4j-1.2.17.jar
  其中mybatis-3.3.0.jar 用于实现mybatis提供的功能,ojdbc14.jar用于连接数据库,junit-4.7.jar用于实现功能测试,log4j-1.2.17.jar用于进行日志记录
  如下图所示:在项目目录下建立一个新的文件夹jar,将需要导入的包进行复制粘贴到jar目录下边

注意:在本地存放这些jar包时不要使用中文

   然后再右键选中jar目录下的四个文件,点击添加“buildPath->add Path”,就能够看到如下界面:表示添加路径成功

 

4 项目中引入mybatis配置文件dtd约束文件

  同样的,在项目下新建dtd目录,将约束文件复制到目录下即可,如下图所示:dtd文件结构,dtd文件下载:http://download.csdn.net/download/suwu150/9660699


dtd文件的作用是对配置文件xml进行约束,这样的话程序员就能按照规范书写xml文件,mybatis就能够正确的读取并解析,以上dtd是配置本地的,当然我们也能够使用官网的连接进行约束

5 mybatis中的配置文件和映射文件分别引入到项目中

          1)  src下面的mybatis-config.xml:

首先我们对本地dtd约束进行关联,如下图进入到Preferences下面,在搜索框中输入xml,选中xml catalog配置名,然后点击右边的add按钮

出现如下图所示界面,其中Location位置和key位置为空,下图是配置过的,key内容为-//mybatis.org//DTD Config 3.0//EN,Location内容为自己的,可以通过Workspace进行选择,也就是我们前面复制到项目中的dtd文件(第4步操作中的):

点击OK,现在我们能够进行xml配置文件的书写,添加约束的作用就是对程序员的书写进行规范,以保证mybatis能够正常解析

如下图所示:选中src右键创建新文件mybatis-config.xml

注意:xml文件开头必须置顶,前面不能有空格

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2. <!– 进行dtd约束,其中-//mybatis.org//DTD Config 3.0//EN为公共约束,  
  3.  http://mybatis.org/dtd/mybatis-3-config.dtd为获取网络中提供的dtd约束 —>  
  4.             <!DOCTYPE configuration PUBLIC “-//mybatis.org//DTD Config 3.0//EN”    
  5.             “http://mybatis.org/dtd/mybatis-3-config.dtd”>  
  6. <configuration>  
  7.     <typeAliases>  
  8.     <!– 给pojo类起别名 –>  
  9.         <typeAlias type=“com.mybatis.pojo.Student” alias=“Student” />  
  10.     </typeAliases>  
  11.     <!– 配置数据库环境其中development为默认的数据库名称事务管理器transactionManager类型为JDBC类型,数据源dataSource使用连接池的方式 –>  
  12.     <environments default=“development”>  
  13.         <environment id=“development”>  
  14.             <transactionManager type=“JDBC”></transactionManager>  
  15.             <dataSource type=“POOLED”>  
  16.             <!– 配置数据库信息这里使用oracle数据库 –>  
  17.                 <property name=“driver” value=“oracle.jdbc.driver.OracleDriver” />  
  18.                 <property name=“url” value=“jdbc:oracle:thin:@127.0.0.1:1521:orcl” />  
  19.                 <property name=“username” value=“briup” />  
  20.                 <property name=“password” value=“briup” />  
  21.             </dataSource>  
  22.         </environment>  
  23.     </environments>  
  24.     <!– 配置xml文件映射路径,在这里可以进行sql的操作 –>  
  25.     <mappers>  
  26.         <mapper resource=“com/mybatis/mappers/StudentMapper.xml” />  
  27.     </mappers>  
  28. </configuration>  

 2)com.mybatis.mappers包下面的StudentMapper.xml:

首先,我们实现接口com.mybatis.mappers;包下面新建一个接口StudentMapper.java,用来对应xml文件中的sql语句(映射),从而方便我们调用

  1. package com.mybatis.mappers;  
  2. import java.util.List;  
  3. import com.mybatis.pojo.Student;  
  4. public interface StudentMapper {  
  5.     List<Student> findAllStudents();   
  6.     Student findStudentById(Integer id);   
  7.     void insertStudent(Student student);  
  8. }  

使用同样的方法,对mapper文件进行约束

 然后进行xml代码的编写:

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2.             <!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”    
  3.             “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>  
  4. <!– com.mybatis.mappers.StudentMapper是我们定义接口的全限定名字 这样就可以使用接口调用映射的SQL语句了 这个名字一定要和接口对应上 –>  
  5. <mapper namespace=“com.mybatis.mappers.StudentMapper”>  
  6.     <resultMap type=“Student” id=“StudentResult”>  
  7.         <id property=“studId” column=“stud_id” />  
  8.         <result property=“name” column=“name” />  
  9.         <result property=“email” column=“email” />  
  10.         <result property=“dob” column=“dob” />  
  11.     </resultMap>  
  12.     <select id=“findAllStudents” resultMap=“StudentResult”>  
  13.         SELECT * FROM STUDENTS  
  14.     </select>  
  15.     <!– 列名和属性名字不一致可以给查询的列起一个别名 –>  
  16.     <select id=“findStudentById” parameterType=“int” resultType=“Student”>  
  17.         SELECT STUD_ID AS STUDID,NAME,EMAIL,DOB  
  18.         FROM STUDENTS  
  19.         WHERE  
  20.         STUD_ID=#{id}  
  21.     </select>  
  22.     <insert id=“insertStudent” parameterType=“Student”>  
  23.         INSERT INTO  
  24.         STUDENTS(STUD_ID,NAME,EMAIL,DOB)  
  25.         VALUES(#{studId},#{name},#{email},#{dob})  
  26.     </insert>  
  27. </mapper>                   

*******************************************************
            注意:xml文件中写的sql语句,最后面不要写分号,否则会报错误,ORA-00911: 无效字符
            *******************************************************

6 配置log4j.properties文件中的日志输出:

            位置src下面,文件名log4j.properties
            内容:
            log4j.rootLogger=DEBUG, stdout  
            log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
            log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
            log4j.appender.stdout.layout.ConversionPattern=%d [%-5p] %c – %m%n
            #show sql
            log4j.logger.java.sql.ResultSet=INFO   
            log4j.logger.org.apache=INFO   
            log4j.logger.java.sql.Connection=DEBUG   
            log4j.logger.java.sql.Statement=DEBUG   
            log4j.logger.java.sql.PreparedStatement=DEBUG   
7 创建一个测试类StudentMapperTest.java

  1. package com.mybatis.test;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.util.Date;  
  5. import org.apache.ibatis.io.Resources;  
  6. import org.apache.ibatis.session.SqlSession;  
  7. import org.apache.ibatis.session.SqlSessionFactory;  
  8. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  9. import org.junit.Test;  
  10. import com.mybatis.mappers.StudentMapper;  
  11. import com.mybatis.pojo.Student;  
  12. public class StudentMapperTest {  
  13.     @Test  
  14.     public void test_insertStudent()  
  15.     {  
  16.         SqlSession session=null;  
  17.         try {  
  18.             // 获取配置文件  
  19.             InputStream inputStream = Resources.getResourceAsStream(“mybatis-config.xml”);  
  20.             // 生成工厂对象  
  21.             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  22.             // 使用工厂对象生成sqlsession  
  23.             session = sqlSessionFactory.openSession();  
  24.             // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象  
  25.             StudentMapper studentMapper = session.getMapper(StudentMapper.class);  
  26.             Student student = new Student(1“suwu150”“1730@qq.com”,new Date());  
  27.             studentMapper.insertStudent(student);  
  28.         } catch (IOException e) {  
  29.             session.rollback();  
  30.             e.printStackTrace();  
  31.         }  
  32.     }  
  33. }             

8 运行成功后会在控制台中看到log4j日志输出的这个程序运行的相关信息,如下:

在数据库中查询能够看到如下信息

 
9 对mybatis的一些基本封装
    每次读取配置文件,产生一个工厂对象SqlSessionFactory,然后再生成出SqlSession对象,这个过程虽然并不复杂,但是也都是一些重复的代码流程,所以我们可以对其进行一个简单的封装:           

  1. package com.mybatis.utils;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  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. public class MyBatisSqlSessionFactory {  
  9.     private static SqlSessionFactory sqlSessionFactory;  
  10.     public static SqlSessionFactory getSqlSessionFactory(){  
  11.         if(sqlSessionFactory == null){  
  12.             InputStream inputStream = null;  
  13.             try {  
  14.                 inputStream = Resources.getResourceAsStream(“mybatis-config.xml”);   
  15.                 sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  16.             } catch (IOException e) {  
  17.                 e.printStackTrace();  
  18.                 throw new RuntimeException(e.getCause());  
  19.             }  
  20.         }  
  21.         return sqlSessionFactory;  
  22.     }  
  23.     public static SqlSession openSession() {   
  24.         return openSession(false); //默认手动提交,故我们在调用的时候需要进行提交  
  25.     }  
  26.     public static SqlSession openSession(boolean autoCommit) {   
  27.         return getSqlSessionFactory().openSession(autoCommit);   
  28.     }  
  29. }   

            之后每次使用的时候只需要调用该类中的静态方法openSession即可
            上面的代码可简写为: //注意事务是自动提交还是手动提交

            MyBatisSqlSessionFactory.openSession().getMapper(StudentMapper.class).insertStudent(s);

10 在上面的测试中,我们仅仅完成了增加的功能,下面我们进行实现删除修改和查询的功能:

在映射文件中进行如下配置:

  1. <?xml version=“1.0” encoding=“UTF-8”?>  
  2.             <!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN”    
  3.             “http://mybatis.org/dtd/mybatis-3-mapper.dtd”>  
  4. <!– com.mybatis.mappers.StudentMapper是我们定义接口的全限定名字 这样就可以使用接口调用映射的SQL语句了 这个名字一定要和接口对应上 –>  
  5. <mapper namespace=“com.mybatis.mappers.StudentMapper”>  
  6.     <resultMap type=“Student” id=“StudentResult”>  
  7.         <id property=“studId” column=“stud_id” />  
  8.         <result property=“name” column=“name” />  
  9.         <result property=“email” column=“email” />  
  10.         <result property=“dob” column=“dob” />  
  11.     </resultMap>  
  12.     <select id=“findAllStudents” resultMap=“StudentResult”>  
  13.         SELECT * FROM STUDENTS  
  14.     </select>  
  15.     <!– 列名和属性名字不一致可以给查询的列起一个别名 –>  
  16.     <select id=“findStudentById” parameterType=“int” resultType=“Student”>  
  17.         SELECT STUD_ID AS STUDID,NAME,EMAIL,DOB  
  18.         FROM STUDENTS  
  19.         WHERE  
  20.         STUD_ID=#{id}  
  21.     </select>  
  22.     <insert id=“insertStudent” parameterType=“Student”>  
  23.         INSERT INTO  
  24.         STUDENTS(STUD_ID,NAME,EMAIL,DOB)  
  25.         VALUES(#{studId},#{name},#{email},#{dob})  
  26.     </insert>  
  27.     <delete id=“deleteStudentById” parameterType=“int”>  
  28.       delete from students  
  29.       where STUD_ID=#{id}  
  30.     </delete>  
  31.     <update id=“updateStudentById” parameterType=“Student”>  
  32.         update students   
  33.         set name=#{name},email=#{email}  
  34.         where stud_id=#{studId}  
  35.     </update>  
  36. </mapper>  

在接口类中进行如下配置:

  1. package com.mybatis.mappers;  
  2. import java.util.List;  
  3. import com.mybatis.pojo.Student;  
  4. public interface StudentMapper {  
  5.     List<Student> findAllStudents();   
  6.     Student findStudentById(Integer id);   
  7.     void insertStudent(Student student);  
  8.     void deleteStudentById(Integer id);  
  9.     void updateStudentById(Student student);  
  10. }  

在测试文件中编写如下代码:

  1. package com.mybatis.test;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6. import org.apache.ibatis.io.Resources;  
  7. import org.apache.ibatis.session.SqlSession;  
  8. import org.apache.ibatis.session.SqlSessionFactory;  
  9. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  10. import org.junit.Test;  
  11. import com.mybatis.mappers.StudentMapper;  
  12. import com.mybatis.pojo.Student;  
  13. import com.mybatis.utils.MyBatisSqlSessionFactory;  
  14. public class StudentMapperTest {  
  15.     @Test  
  16.     public void test_insertStudent()  
  17.     {  
  18.         SqlSession session=null;  
  19.         try {  
  20.             // 获取配置文件  
  21.             InputStream inputStream = Resources.getResourceAsStream(“mybatis-config.xml”);  
  22.             // 生成工厂对象  
  23.             SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);  
  24.             // 使用工厂对象生成sqlsession  
  25.             session = sqlSessionFactory.openSession();  
  26.             // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象  
  27.             StudentMapper studentMapper = session.getMapper(StudentMapper.class);  
  28.             Student student = new Student(2“suwu150”“1730@qq.com”,new Date());  
  29.             studentMapper.insertStudent(student);  
  30.             session.commit();  
  31.             System.out.println(“执行完毕”);  
  32.         } catch (IOException e) {  
  33.             session.rollback();  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37.     @Test  
  38.     public void test_deleteStudentById()  
  39.     {  
  40.         SqlSession session=null;  
  41.         session = MyBatisSqlSessionFactory.openSession();//使用封装之后的类  
  42.         // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象  
  43.         StudentMapper studentMapper = session.getMapper(StudentMapper.class);  
  44.         studentMapper.deleteStudentById(2);  
  45.         session.commit();  
  46.         System.out.println(“执行完毕”);  
  47.     }  
  48.     @Test  
  49.     public void test_updateStudentById()  
  50.     {  
  51.         SqlSession session=null;  
  52.         session = MyBatisSqlSessionFactory.openSession();//使用封装之后的类  
  53.         // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象  
  54.         StudentMapper studentMapper = session.getMapper(StudentMapper.class);  
  55.         Student student = new Student();  
  56.         student.setStudId(1);  
  57.         student.setName(“sususu”);  
  58.         student.setEmail(“123443@136.com”);  
  59.         studentMapper.updateStudentById(student);  
  60.         session.commit();  
  61.         System.out.println(“执行完毕”);  
  62.     }  
  63.     @Test  
  64.     public void test_findStudentById()  
  65.     {  
  66.         SqlSession session=null;  
  67.         session = MyBatisSqlSessionFactory.openSession();//使用封装之后的类  
  68.         // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象  
  69.         StudentMapper studentMapper = session.getMapper(StudentMapper.class);  
  70.         Student student = studentMapper.findStudentById(1);  
  71.         System.out.println(student);  
  72.         System.out.println(“执行完毕”);  
  73.     }  
  74.     @Test  
  75.     public void test_findAllStudents()  
  76.     {  
  77.         SqlSession session=null;  
  78.         session = MyBatisSqlSessionFactory.openSession();//使用封装之后的类  
  79.         // 使用sqlsession获得映射接口的实现类对象,接口的引用指向实现类的对象  
  80.         StudentMapper studentMapper = session.getMapper(StudentMapper.class);  
  81.         List<Student> list = studentMapper.findAllStudents();  
  82.         System.out.println(list);  
  83.         System.out.println(“执行完毕”);  
  84.     }  
  85. }  

这样我们就完成了对Student对象的增删改查                        

未经允许不得转载:极客技术 » Mybatis增删改查实例

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址