标题 1. Mybatis的基本应用:
对于我这样的初学者的理解是简化连接数据库的步骤,框架的应用也是,他利用固定的模式,是的我们在编写连接数据库的步骤时简化了代码。
标题 2.使用mybatis实现的基本步骤:
- 我们可以在Mybatis官网下复制核心配置文件mybatis-config.xml
- 然后我们在编写对应的Dao层与Pojo包 以及其他的工具类Utils
- 在Dao层当中我们编写对应的接口与mapper.xml映射文件
- Pojo包当中的实体类与数据库ORM映射一一对应
- 工具类当中我们获得实例工厂与会话对象,将公共代码提取出来
- 测试类利用对应的工具类调用方法,得到sqlsession对象,sqlsession得到 对应的mapper,然后用接口调用得到具体的数据,最后展示数据。
package com.wei.Dao;
import com.wei.pojo.grade;
import java.util.List;
public interface Mapper {
List<grade> getGrade();
}
sql语句在映射文件当中
<?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="com.wei.Dao.Mapper">
<select id="getGrade" resultType="grade">
select * from mybatis.grade
</select>
</mapper>
对应的ORM映射
public class grade {
private String name;
private int id;
private String address;
private int idcard;
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public int getIdcard() {
return idcard;
}
public void setIdcard(int idcard) {
this.idcard = idcard;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public grade(String name, int id, String address, int idcard, String sex) {
this.name = name;
this.id = id;
this.address = address;
this.idcard = idcard;
this.sex = sex;
}
public grade() {
}
}
工具类
private static SqlSessionFactory build;//提升作用域
static {
try {
InputStream resource = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
build = sqlSessionFactoryBuilder.build(resource);
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return build.openSession();
}
}
核心配置文件
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="db.properties"/>
<typeAliases>
<typeAlias type="com.wei.pojo.grade" alias="grade"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/wei/Dao/Mapper.xml"/>
</mappers>
</configuration>
测试类
public class MyTest {
@Test
public void Test(){
SqlSession sqlSession = Utils.getSqlSession();
Mapper mapper = sqlSession.getMapper(Mapper.class);//反射到对应的类方法
List<grade> grade = mapper.getGrade();
for (grade num :
grade) {
System.out.println(num.getSex()+num.getAddress()+num.getName()+num.getId()+num.getIdcard());
}
}
}
在这当中应注意的问题?
- 需要特别注意对应的路径,mapper.xml需要和对应的接口名一样
- 在注册时对应映射文件的路径要写清楚
<mappers>
<mapper resource="com/wei/Dao/Mapper.xml"/>
</mappers>
- 在使用配置文件进行数据的读入时,数据顺序要与核心配置文件的读取顺序相同。
- 在自己配置
<properties resource="db.properties"/>
时要注意此当中属性小于配置文件当中属性的优先级。 - 运用别名,以及其他setting是需要注意mybatis当中的顺序
6.com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 2 无效。
该错误是由于一些配置文件如:applicationContext.xml的编码原因。在配置文件中引入了<?xml version="1.0" encoding="UTF-8"?>, 在配置文件可能包含有中文注释,导致在编译后中文注释在配置文件乱码抛异常。有些解决方法提到将该文件改为GBK编码,但由于我们项目本身是UTF-8编码的,所以这种方式是行不通的。由于我的项目是Maven构建的,所以在项目依赖配置文件pom.xml上加入构建项目编码属性:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
小结:
Mybatis是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。(官方文档说明)因此在使用当中我们要注意当中的约定和他的格式,感觉在使用当中要按步骤的进行不然很容易出错。