MyBatis (一)
首先贴上mybatis官方参考文档网址
http://www.mybatis.org/mybatis-3/zh/configuration.html
里面有mybatis的具体使用介绍
Tip:可以换成中文哦!
mybatis优点
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
- 先建库建表
表结构 - 建立一个maven工程,用来测试mybatis
工程目录结构
pojo包放实体,mapper文件夹内存放sql映射文件,mybatis-cofigs-xml为mybatis核心配置文件,然后下面的为测试类,pom.xml引入依赖
目前暂时为此结构,为后期实现mvc结构准备,
—小白学习篇
Author.java
package org.blog.pojo;
public class Author {
private Integer id; // ID
private String username; // 用户
private String password; // 密码
private String email; // email
private String bio; // 个人简介
// public Author() {
// System.out.println("Author()");
// }
// getter setter
public Author(Integer id, String username, String password, String email, String bio) {
super();
System.out.println("Author(...)");
this.id = id;
this.username = username;
this.password = password;
this.email = email;
this.bio = bio;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getBio() {
return bio;
}
public void setBio(String bio) {
this.bio = bio;
}
// toString()
@Override
public String toString() {
return "Author [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + ", bio="
+ bio + "]";
}
}
mybatis-configs.xml mybatis核心配置文件
<?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:///blogsys"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
</configuration>
封装实体类数据
按照官方的例子 从 XML 中构建 SqlSessionFactory,
这里用到Junit单元测试,需要引入对应依赖
TestBase.java
package org.mybatis;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Before;
import org.junit.Test;
public class TestBase {
protected SqlSessionFactory sqlSessionFactory;
@Before
public void init()throws IOException{
String resource = "mybatis-configs.xml";
InputStream inputStream =
Resources.getResourceAsStream(resource);
sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testSqlSession(){
SqlSession session=
sqlSessionFactory.openSession();
System.out.println(session);
}
}
TestAuthor01.java
package org.mybatis;
import java.util.Map;
import org.apache.ibatis.session.SqlSession;
import org.blog.pojo.Author;
import org.junit.Test;
public class TestAuthor01 extends TestBase{
@Test
public void testFindAuthor(){
// 1.获取sqlsession对象
SqlSession session=
sqlSessionFactory.openSession();
// 2.执行sql查询
String namespace="org.blog.pojo";
String elementId="findAuthor";
String statement=namespace+"."+elementId;
Map<String,Object> map=
session.selectOne(statement,1);
System.out.println(map);
System.out.println(map.getClass().getName());
// 3.释放资源
session.close();
}
@Test
public void testSelectAuthor(){
// 1.获取sqlsession对象
SqlSession session=
sqlSessionFactory.openSession();
// 2.执行sql查询
String namespace="org.blog.pojo";
String elementId="selectAuthor";
String statement=namespace+"."+elementId;
Author author=
session.selectOne(statement,1);
System.out.println(author);
// 3.释放资源
session.close();
}
}
最后在mapper文件夹中的AuthorMapper.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="org.blog.pojo">
<!-- 基于id查询作者信息 ,在mybatis中每个元素
经解析以后都会封装一个MappedStatement对象,
当有多个MappedStatement时,系统底层还会将这些
对象存储到Map集合.-->
<select id="findAuthor"
resultType="map">
select * from author where id = #{id}
</select>
<select id="selectAuthor"
resultType="org.blog.pojo.Author">
select * from author where id = #{id}
</select>
</mapper>
执行Junit测试框架 看看是否能从数据库中查询到数据
经历过的坑有
- 映射文件中namespace的值加上sql语句id的值与statement不一致,后续可以利用mapper接口开发优化
- findAuthor方法返回值类型为map可行,selectAuthor方法的返回值类型要么就写类全名,要么在核心配置文件中加上别名控制,经测试,添加了之后的返回类型是可以忽略大小写的
- mapper文件的引入,mybatis-configs.xml的结构以及属性值,都是值得注意的地方,因为xml文件查错很难受,最好是写上头文件中的信息使xml文件在编写时能有alt+/的提示
后续学习利用mapper接口实现效果
学习笔记 文章粗糙 多多指教
详细的别名、映射类型和其他配置解释见
http://www.mybatis.org/mybatis-3/zh/configuration.html