欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-12 19:26:23
恢复内容开始 Mybatis入门介绍 一、MyBatis介绍 什么是MyBtis? MyBatis 是一个简化和实现了 Java 数据持久化层(persistence layer)的开源框架,它抽象了大量的 JDBC 冗余代 码,并提供了一个简单易用的 API 和数据库交互。 MyBatis 的前身 ......

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

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后两者的比较就会显而易见了。

   第一步:创建数据库

   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;
}

   获取数据:

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

 jdbc缺点分析:

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

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

 

 

 

三、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 }

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

  删除操作:

  第一步:接口写入一个方法(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 }