发表于: 2019-01-10 19:21:10

1 523


今天使用了Mybatis编写DAO,并且经过调试实现了正常的运行,方法如下:

在IDEA用MAVEN创建AMybatis,并按照如下格式创建文件。

打开pom.xml文件添加相应的jar包

<dependencies>
 <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.11</version>
   <scope>test</scope>
 </dependency>
 <dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.13</version>
 </dependency>
 <dependency>
   <groupId>org.mybatis</groupId>
   <artifactId>mybatis</artifactId>
   <version>3.4.6</version>
 </dependency>

</dependencies>


创建conf.xml配置文件,输入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
   <environments default="development">
       <environment id="development">
           <transactionManager type="JDBC" />
           <!-- 配置数据库连接信息 -->
           <dataSource type="POOLED">
               <property name="driver" value="com.mysql.jdbc.Driver" />
               <property name="url" value="jdbc:mysql://localhost:3306/apply?characterEncoding=utf8&amp;serverTimezone=GMT%2B8" />
               <property name="username" value="root" />
               <property name="password" value="jin880624" />
           </dataSource>
       </environment>
   </environments>
   <mappers>
       <!-- 注册StudentMapper.xml文件,
       StudentMapper.xml位于com.jinengshu.Mapper这个包下,所以resource写成com/jinengshu/Mapper/StudentMapper.xml-->
       <mapper resource="Mapper/StudentMapper.xml"/>
   </mappers>

</configuration>

其中

 <property name="url" value="jdbc:mysql://localhost:3306/apply?characterEncoding=utf8&amp;serverTimezone=GMT%2B8" />

代表的是数据库连接,后面如果不加

?characterEncoding=utf8&amp;serverTimezone=GMT%2B8

系统会报错。另外

<mapper resource="Mapper/StudentMapper.xml"/>

为映射文件的地址,现在开始编写实体类文件,映射文件后面会编写。

首先实体类文件与数据库中的项目是一一对应的,所以先看数据库的内容

我的数据库名是apply,表格名是students。里面的项目有13项,包括id, create_at, update_at, name, QQ, learn_type等。按照表格创建实体类Student

具体内容如下:

package com.jinengshu.Entity;

/**
* @author gacl
* Student表所对应的实体类
*/
public class Student {

//实体类的属性和表的字段名称一一对应
   private int id;
   private long create_at;
   private long update_at;
   private String name;
   private long QQ;
   private String learn_type;
   private long join_date;
   private String graduated;
   private int online_number;
   private String web_report;
   private String whis;
   private String master;
   private String how_to_know;

   public int getId() {
return id;
   }

public void setId(int id) {
this.id = id;
   }

public long getCreate_at() {
return create_at;
   }

public void  setCreate_at(long create_at) {
this.create_at = create_at;
   }

public long getUpdate_at() {
return update_at;
   }

public void setUpdate_at(long update_at) {
this.update_at = update_at;
   }

public String getName() {
return name;
   }

public void setName(String name) {
this.name = name;
   }

public long getQQ() {
return QQ;
   }

public void setQQ(long QQ) {
this.QQ = QQ;
   }

public String getLearn_type() {
return learn_type;
   }

public  void setLearn_type(String learn_type) {
this.learn_type = learn_type;
   }

public long getJoin_date() {
return join_date;
   }

public void setJoin_date(long join_date) {
this.join_date = join_date;
   }

public String getGraduated() {
return graduated;
   }

public void setGraduated(String graduated) {
this.graduated = graduated;
   }

public int getOnline_number() {
return online_number;
   }

public void setOnline_number(int online_number) {
this.online_number = online_number;
   }

public String getWeb_report() {
return web_report;
   }

public void setWeb_report(String web_report) {
this.web_report = web_report;
   }

public String getWhis() {
return whis;
   }

public void setWhis(String whis) {
this.whis = whis;
   }

public String getMaster() {
return master;
   }

public void setMaster(String master) {
this.master = master;
   }

public String getHow_to_know() {
return how_to_know;
   }

public void setHow_to_know(String how_to_know) {
this.how_to_know = how_to_know;
   }

@Override
   public String toString() {
return "Student{" +
"id=" + id +
", create_at=" + create_at +
", update_at=" + update_at +
", name='" + name + '\'' +
", QQ=" + QQ +
", learn_type='" + learn_type + '\'' +
", join_date=" + join_date +
", graduated='" + graduated + '\'' +
", online_number=" + online_number +
", web_report='" + web_report + '\'' +
", whis='" + whis + '\'' +
", master='" + master + '\'' +
", how_to_know='" + how_to_know + '\'' +
'}';
   }
}

实体类的主要内容为针对数据库表格项目创建getter,setter和toString的语句。完成后开始编写映射文件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,namespace的值习惯上设置成包名+sql映射文件名,这样就能够保证namespace的值是唯一的
例如namespace="mapper.StudentMapper"就是mapper(包名)+StudentMapper(StudentMapper.xml文件去除后缀)
-->
<mapper namespace="Mapper.StudentMapper">
   <!-- 在select标签中编写查询的SQL语句, 设置select标签的id属性为getStudent,id属性值必须是唯一的,不能够重复
   使用parameterType属性指明查询时使用的参数类型,resultType属性指明查询返回的结果集类型
   resultType="comjinengshu.entity.Student"就表示将查询结果封装成一个Student类的对象返回
   Student类就是Student表所对应的实体类
   -->
   <!--
       根据id查询得到一个user对象
    -->
   <select id="getStudents" parameterType="int"
           resultType="com.jinengshu.Entity.Student">
       select * from students where id=#{id}
</select>
</mapper>

程序编写完成,现在开始测试程序,编写测试类Test

package com.jinengshu;

import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import com.jinengshu.Entity.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Test {

public static void main(String[] args) throws IOException {
//mybatis的配置文件
       String resource = "conf.xml";
       //使用类加载器加载mybatis的配置文件(它也加载关联的映射文件)
       InputStream is = Test.class.getClassLoader().getResourceAsStream(resource);
       //构建sqlSession的工厂
       SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(is);
       //使用MyBatis提供的Resources类加载mybatis的配置文件(它也加载关联的映射文件)
       //Reader reader = Resources.getResourceAsReader(resource);
       //构建sqlSession的工厂
       //SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
       //创建能执行映射文件中sql的sqlSession
       SqlSession session = sessionFactory.openSession();
       /**
        * 映射sql的标识字符串,
        * mapper.StudentMapper是StudentMapper.xml文件中mapper标签的namespace属性的值,
        * getStudent是select标签的id属性值,通过select标签的id属性值就可以找到要执行的SQL
        */
       String statement = "Mapper.StudentMapper.getStudents";//映射sql的标识字符串
       //执行查询返回一个唯一user对象的sql
       Student user = session.selectOne(statement, 1);
       System.out.println(user);
   }
}

运行测试类文件,如显示一下资料则程序运行正常。

明天的任务:学习spring的框架和用法,结合Junit使用。

遇到的问题:

1.在编写Mybatis中由于没有创建资源文件夹并设置为资源文件,所以程序没有调用在资源文件夹下的配置文件。

2.在配置文件数据库连接Url的配置中,没有配置字符格式和服务器时间时区,所以出现了系统报错。

3.测试类文件中

 String statement = "Mapper.StudentMapper.getStudents";//映射sql的标识字符串

输入错误,在Mapper.StudentMapper..getStudent多输入一个.造成程序报错找不到Mapper.StudentMapper的资源文件。

收获:今天学会了Mybatis的使用,明白了编写的方法和框架结构。


返回列表 返回列表
评论

    分享到