当前位置: 移动技术网 > IT编程>开发语言>Java > MyBatis的配置与使用(增,删,改,查)

MyBatis的配置与使用(增,删,改,查)

2019年10月13日  | 移动技术网IT编程  | 我要评论

---恢复内容开始---

mybatis入门介绍

一、mybatis介绍

  什么是mybtis?

    mybatis 是一个简化和实现了 java 数据持久化层(persistence layer)的开源框架,它抽象了大量的 jdbc 冗余代 码,并提供了一个简单易用的 api 和数据库交互。

    mybatis 的前身是 ibatis,ibatis 于 2002 年由 clinton begin 创建。mybatis 3 是 ibatis 的全新设计,支持 注解和 mapper。 

    mybatis 流行的主要原因在于它的简单性和易使用性。在 java 应用程序中,数据持久化层涉及到的工作有:将从数据库查询到的数据生成所需要的 java 对象;将 java 对象中的数据通过 sql 持久化到数据库中。

    mybatis 通过抽象底层的 jdbc 代码,自动化 sql 结果集产生 java 对象、java 对象的数据持久化数据库中的过程 使得对 sql 的使用变得容易。 如

  为什么选择mybtis?

  • 最重要的就是消除了很多jdbc是冗余。
  • 学习成本很低
  • 他能很好的与传统数据库协同工作。
  • 支持sql语句。
  • 他提供了与spring框架的集成。
  • 它引入的性能较好。        

  

二、jdac

  java 通过 java 数据库连接(java database connectivity,jdbc)api 来操作关系型数据库,但是 jdbc 是一个 非常底层的 api,我们需要书写大量的代码来完成对数据库的操作。

   我先从最传统是jdbc代码写起再来对比引入mybatis后两者的比较就会显而易见了。

   第一步:创建数据库

   

   第二步:student实体类

 1 package com.nf;
 2 
 3 import java.sql.date;
 4 
 5 public class student {
 6 
 7     private integer stuid;
 8     private string name;
 9     private string email;
10     private date dob;
11 
12     public integer getstuid() {
13         return stuid;
14     }
15 
16     public void setstuid(integer stuid) {
17         this.stuid = stuid;
18     }
19 
20     public string getname() {
21         return name;
22     }
23 
24     public void setname(string name) {
25         this.name = name;
26     }
27 
28     public string getemail() {
29         return email;
30     }
31 
32     public void setemail(string email) {
33         this.email = email;
34     }
35 
36     public date getdob() {
37         return dob;
38     }
39 
40     public void setdob(date dob) {
41         this.dob = dob;
42     }
43 
44     @override
45     public string tostring() {
46         return "student{" +
47                 "stuid=" + stuid +
48                 ", name='" + name + '\'' +
49                 ", email='" + email + '\'' +
50                 ", dob=" + dob +
51                 '}';
52     }
53 }

  第三步:创建studentmapper接口

package com.nf;

import java.sql.sqlexception;

public interface studentdao {
    //方法
    public student findstudentbyid(int stuid) ;
}

  第四步:创建studentmapperimpl实现类

package com.nf;

import java.sql.*;

public class studentdaoimpl implements studentdao {

    @override
    public student findstudentbyid(int stuid) throws  sqlexception {
        student student = null;
        connection connection;

        //获取连接
    string jdbcurl = "jdbc:mysql://localhost:3306/student2?characterencoding=utf8&usessl=false&servertimezone=utc&rewritebatchedstatements=true";
    connection =  drivermanager.getconnection(jdbcurl,"root","123456");

        try {
        //加载驱动
        class.forname("com.mysql.cj.jdbc.driver");
    } catch (classnotfoundexception e) {
        e.printstacktrace();
    }
    //获取preparedstatement
    preparedstatement  pst = connection.preparestatement("select * from students where stuid=?");
            pst.setint(1,stuid);
    //查询获取结果
    resultset rs = pst.executequery();
    // 处理结果集
            if(rs.next()){
        student = new student();
        student.setstuid(rs.getint("stuid"));
        student.setname(rs.getstring("name"));
        student.setemail(rs.getstring("email"));
        student.setdob(rs.getdate("dob"));
    }
            rs.close();
            pst.close();
            connection.close();
        return student;
}

   获取数据:

 jdbc缺点分析:

上述的每个方法中有大量的重复代码:创建一个连接,创建一个 statement 对象,设置输入参数,关闭资源(如 connection,statement,resultset)。

 

 

 

三、mybatis

  我们现在使用mybatis现实上面的代码:

  3.1 添加依赖(pom.xml)

1    <dependency>
2       <groupid>org.mybatis</groupid>
3       <artifactid>mybatis</artifactid>
4       <version>3.5.2</version>
5     </dependency>

 

 

 

  3.2 全局配置文件(config.xml )

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <!doctype configuration public "-//mybatis.org//dtd config 3.0//en"
 3         "http://mybatis.org/dtd/mybatis-3-config.dtd">
 4 <!--根标签-->
 5 <configuration>
 6     <!-- 环境,可以配置多个,default:指定采用哪个环境 -->
 7     <environments default="mycom">
 8         <!-- id:唯一标识 -->
 9         <environment id="mycom">
10             <!-- 事务管理器,jdbc类型的事务管理器 -->
11             <transactionmanager type="jdbc"/>
12             <!-- 数据源,池类型的数据源 -->
13             <datasource type="pooled">
14                 <property name="driver" value="com.mysql.cj.jdbc.driver"/>
15                 <property name="url" value="jdbc:mysql://localhost:3306/student2?characterencoding=utf8&amp;usessl=false&amp;servertimezone=utc&amp;rewritebatchedstatements=true"/>
16                 <property name="username" value="root"/>
17                 <property name="password" value="123456"/>
18             </datasource>
19         </environment>
20     </environments>
21     <mappers>
22         <mapper resource="studentmapper.xml"></mapper>
23     </mappers>
24 </configuration>

 

 

 

 3.3配置文件 studentmapper.xml ( studentmapper.xml  )

  第一步: 在 sql mapper 映射配置文件中配置 sql 语句,假定为 studentmapper.xml 

  查询操作:

//studentmapper.xml
<?xml version="1.0" encoding="utf-8" ?>
<!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- mapper:根标签,namespace:命名空间,随便写,一般保证命名空间唯一 -->
<mapper namespace="com.nf.studentdao" >
<!--
column为java实体类的属性名   property为数据库属性名
-->
<resultmap id="mystudent" type="com.nf.student"> <id column="stuid" property="stuid"></id> <result column="name" property="name"></result> <result column="email" property="email"></result> <result column="dob" property="dob"></result> </resultmap>
<!-- statement,内容:sql语句。id:要与接口方法名相同,在同一个命名空间下保持唯一 resulttype:parameter:需要返回的类型;sql语句查询结果集的封装类型,tb_user即为数据库中的表 --> //查询
       <select id="findstudentbyid" parametertype="int" resultmap="mystudent"> select stuid as stuid, name, email, dob from students where stuid=#{id} </select>
</mapper>

 3.4 测试类

 1 public class test2 {
 2     public static void main(string[] args) throws sqlexception {
 3         sqlsessionfactory factory = null;
 4         try {
 5             //指定全局配置的文件xml再读取配置文件
 6            //(这里可以比喻成一个建筑图 工程师要建房子首先要先看图纸,我们现在把config.xml看做是一张图纸)
 7             inputstream inputstream= resources.getresourceasstream("config.xml");
 8             // 构建sqlsessionfactory(创建一个工厂)
 9             sqlsessionfactorybuilder builder = new sqlsessionfactorybuilder();
10             factory = builder.build(inputstream);
11             system.out.println("1.配置的config.xml"+inputstream);
12             system.out.println("2.创建出一个工厂"+factory);
13         } catch (ioexception e) {
14             e.printstacktrace();
15         }
16         // 获取sqlsession(打开工厂)
17         sqlsession sqlsession = factory.opensession();
18         system.out.println("3.session"+sqlsession);
19         //studentmapper层(将东西放进工厂生产)                   
20         studentdao studentdao = sqlsession.getmapper(studentdao.class);
21         system.out.println("4.获得实现类的实例:"+studentdao);
22         student student = studentdao.findstudentbyid(1);
23         system.out.println(student);
24         
25         sqlsession.close();
26     }
27 }

  删除操作:

  第一步:接口写入一个方法(findstudenrdelete()):

package com.nf;

import java.sql.sqlexception;
import java.util.list;

public interface studentdao {
//    查询
    public student findstudentbyid(int stuid) throws sqlexception;
//    删除
    public boolean findstudentdelete(int stuid);
    

 

  第二步: 配置文件 studentmapper.xml 

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 
 4 
 5 <mapper namespace="com.nf.studentdao" >
 6 
 7     <resultmap id="mystudent" type="com.nf.student">
 8         <id column="stuid" property="stuid"></id>
 9         <result column="name" property="name"></result>
10         <result column="email" property="email"></result>
11         <result column="dob" property="dob"></result>
12     </resultmap>
13 
14   //查询
15     <select id="findstudentbyid"  parametertype="int"  resultmap="mystudent">
16         select stuid as stuid, name, email, dob
17          from students where stuid=#{id}
18     </select>
19 
20   //删除     id:与接口的方法名要一致             student的实体类
21     <delete id="findstudentdelete" parametertype="com.nf.student">
22           delete from students where stuid=#{id}
23     </delete>
24 <mapper>

 

   第三步:测试类(testdelete.java)

 

 1 package com.nf;
 2 
 3 import org.apache.ibatis.session.sqlsession;
 4 import org.apache.ibatis.session.sqlsessionfactory;
 5 import org.apache.ibatis.io.resources;
 6 import org.apache.ibatis.session.sqlsessionfactorybuilder;
 7 
 8 import java.io.ioexception;
 9 import java.io.inputstream;
10 
11 
12 //删除
13 public class test4 {
14     public static void main(string[] args) {
15         sqlsessionfactory factory = null;
16         try {
17             inputstream inputstream = resources.getresourceasstream("config.xml");
18             sqlsessionfactorybuilder builder = new sqlsessionfactorybuilder();
19             factory = builder.build(inputstream);
20         } catch (ioexception e) {
21             e.printstacktrace();
22         }
23         sqlsession sqlsession = factory.opensession();
24         studentdao studentdao = sqlsession.getmapper(studentdao.class);
25         
26         boolean ok = studentdao.findstudentdelete(1);//点接口方法名
27         if(ok){
28             system.out.println("删除成功");
29         }else{
30             system.out.println("删除失败");
31         }
32         sqlsession.commit();
33     }
34 }

 

  添加操作:

  第一步:接口写入一个方法(findstudenrdelete()):

package com.nf;

import java.sql.sqlexception;
import java.util.list;

public interface studentdao {
//    查询
    public student findstudentbyid(int stuid) throws sqlexception;
//    删除
    public boolean findstudentdelete(int stuid);
//    添加
    public boolean findstudentinsert(student student);

}

 

   第二步:第二步: 配置文件 studentmapper.xml 

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 3 
 4 
 5 <mapper namespace="com.nf.studentdao" >
 6 
 7     <resultmap id="mystudent" type="com.nf.student">
 8         <id column="stuid" property="stuid"></id>
 9         <result column="name" property="name"></result>
10         <result column="email" property="email"></result>
11         <result column="dob" property="dob"></result>
12     </resultmap>
13 
14 
15     <select id="findstudentbyid"  parametertype="int"  resultmap="mystudent">
16         select stuid as stuid, name, email, dob
17          from students where stuid=#{id}
18     </select>
19 
20 
21     <delete id="findstudentdelete" parametertype="com.nf.student">
22         delete  from students where stuid=#{id}
23     </delete>
24 //添加
25     <insert id="findstudentinsert parametertype="com.nf.student"  ">
26         insert into students(name,email,dob) value(#{name},#{email},#{dob})
27     </insert>
28 <mapper>

   第三步:测试类(testinsert.java)

 1 package com.nf;
 2 
 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 
 8 import java.io.ioexception;
 9 import java.io.inputstream;
10 import java.sql.date;
11 import java.sql.sqlexception;
12 import java.text.parseexception;
13 import java.text.simpledateformat;
14 
15 //添加
16 public class test3 {
17     public static void main(string[] args) throws sqlexception {
18         sqlsessionfactory factory = null;
19         try {
20             inputstream inputstream = resources.getresourceasstream("config.xml");
21             sqlsessionfactorybuilder builder = new sqlsessionfactorybuilder();
22             factory = builder.build(inputstream);
23             system.out.println("配置xml"+inputstream);
24             system.out.println("创建出一个工厂"+factory);
25         } catch (ioexception e) {
26             e.printstacktrace();
27         }
28         sqlsession sqlsession = factory.opensession();
29         studentdao studentdao = sqlsession.getmapper(studentdao.class);
30         student student = new student();
31         //student.setstuid(4);
32         student.setname("小华");
33         student.setemail("1084522@qq.com");
34 //        日期转类型
35         simpledateformat simpledateformat = new simpledateformat("yyyy-mm-dd");
36         java.util.date  date = null;
37         try {
38             date= simpledateformat.parse("2055-6-2");
39         } catch (parseexception e) {
40             e.printstacktrace();
41         }
42         //new java.sql.date(date.gettime());
43         student.setdob( new java.sql.date(date.gettime()));
44         //不严谨
45         //student.setdob(date.valueof("2055-6-2"));
46         boolean ok =studentdao.findstudentinsert(student);
47         if(ok){
48             system.out.println("添加成功");
49         }else{
50             system.out.println("添加失败");
51         }
52         studentdao.findstudentinsert(student);
53 
54         sqlsession.commit();
55         system.out.println(student.getstuid());
56         sqlsession.close();
57     }
58 }

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网