发表于: 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&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&serverTimezone=GMT%2B8" />
代表的是数据库连接,后面如果不加
?characterEncoding=utf8&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的使用,明白了编写的方法和框架结构。
评论