mybatis之前叫ibatis,2010年從apache遷到google code改名為mybatis。實習的公司中項目多用mybatis作為持久層架構,本文将實作最簡單的mybatis的helloworld。本文使用的工具是intellij idea14+maven。
1.建立project
打開idea,建立一個maven項目。使用maven是因為管理依賴友善。new->project
選擇項目的jdk版本,next
groupid和artifactid随便起名,next
選擇項目存儲的位置,finish
項目建好了,目錄樹如下,已自動生成了pom.xml檔案,即maven的配置檔案
2.建立資料庫
mybatis連接配接的自然是資料庫,資料庫使用的是mysql 5.6.
為了可視化地檢視資料庫,安裝了navicat for mysql,建立連接配接,輸入連接配接名,主機為本機localhost,端口3306,這裡使用者名密碼都是root,可以點選測試連接配接驗證是否可以成功連接配接到資料庫。注意:要保證mysql服務已開啟,可右鍵計算機->管理->服務裡檢視mysql服務的開啟狀況。
建立資料庫mydata,并建立user表。user表字段設計如下,id為主鍵
插入兩條測試記錄
3.配置mybatis和編寫相應類
首先在maven的配置檔案pom.xml中加入依賴的jar包,mybatis的jar包肯定需要,還需要一個java連mysql的驅動包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sw</groupId>
<artifactId>mybatisHello</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
</dependencies>
</project>
建立User類,即和資料庫中的user表對應的類。這裡注意:如mysql裡的user表裡image_url字段對應到User類中imageUrl這裡是在userMapper.xml中配置的對應關系.這裡因為是測試項目就沒有建包了,直接在java下建類
public class User {
private Integer id;
private String username;
private String sex;
private Byte age;
private String phone;
private String qq;
private String password;
private String email;
private String name;
private String birthday;
private String imageUrl;
private String addTs;
private String lastUpdateTs;
private String lastLoginTs;
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 == null ? null : username.trim();
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex == null ? null : sex.trim();
}
public Byte getAge() {
return age;
}
public void setAge(Byte age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone == null ? null : phone.trim();
}
public String getQq() {
return qq;
}
public void setQq(String qq) {
this.qq = qq == null ? null : qq.trim();
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password == null ? null : password.trim();
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email == null ? null : email.trim();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name == null ? null : name.trim();
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday == null ? null : birthday.trim();
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl == null ? null : imageUrl.trim();
}
public String getAddTs() {
return addTs;
}
public void setAddTs(String addTs) {
this.addTs = addTs == null ? null : addTs.trim();
}
public String getLastUpdateTs() {
return lastUpdateTs;
}
public void setLastUpdateTs(String lastUpdateTs) {
this.lastUpdateTs = lastUpdateTs == null ? null : lastUpdateTs.trim();
}
public String getLastLoginTs() {
return lastLoginTs;
}
public void setLastLoginTs(String lastLoginTs) {
this.lastLoginTs = lastLoginTs == null ? null : lastLoginTs.trim();
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
", phone='" + phone + '\'' +
", qq='" + qq + '\'' +
", password='" + password + '\'' +
", email='" + email + '\'' +
", name='" + name + '\'' +
", birthday='" + birthday + '\'' +
", imageUrl='" + imageUrl + '\'' +
", addTs='" + addTs + '\'' +
", lastUpdateTs='" + lastUpdateTs + '\'' +
", lastLoginTs='" + lastLoginTs + '\'' +
'}';
}
}
在java下建立UserMapper接口
public interface UserMapper {
User selectUserById(Integer id);
}
resources目錄下建立userMapper.xml,切記select标簽中的id一定要與UserMapper接口中的方法名一緻!namespace路徑要仔細檢查,多一個空格都會報錯。
<?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="UserMapper">
<resultMap id="BaseResultMap" type="User" >
<id column="id" property="id" jdbcType="INTEGER" />
<result column="username" property="username" jdbcType="VARCHAR" />
<result column="sex" property="sex" jdbcType="VARCHAR" />
<result column="age" property="age" jdbcType="TINYINT" />
<result column="phone" property="phone" jdbcType="VARCHAR" />
<result column="qq" property="qq" jdbcType="VARCHAR" />
<result column="password" property="password" jdbcType="VARCHAR" />
<result column="email" property="email" jdbcType="VARCHAR" />
<result column="name" property="name" jdbcType="VARCHAR" />
<result column="birthday" property="birthday" jdbcType="VARCHAR" />
<result column="image_url" property="imageUrl" jdbcType="VARCHAR" />
<result column="add_ts" property="addTs" jdbcType="VARCHAR" />
<result column="last_update_ts" property="lastUpdateTs" jdbcType="VARCHAR" />
<result column="last_login_ts" property="lastLoginTs" jdbcType="VARCHAR" />
</resultMap>
<select id="<span style="font-family: 宋體; font-size: 9pt; background-color: rgb(228, 228, 255);">selectUserById</span>" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
*
from user
where id = #{id,jdbcType=INTEGER}
</select>
</mapper>
在resources目錄下建立mybatis的配置檔案,properties标簽下定義了jdbc的資訊,url中的mydata就是之前建立的資料庫名。mapper标簽下定義映射的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>
<properties>
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/mydata?" />
<property name="username" value="root" />
<property name="password" value="root" />
</properties>
<typeAliases>
<typeAlias type="User" alias="User"/>
</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="UserMapper.xml" />
</mappers>
</configuration>
最後,看一下目錄樹
4.測試
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 java.io.IOException;
import java.io.Reader;
public class testUserService {
public static void main(String[] args) throws IOException {
String resource = "mybatis_conf.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
int id = 1;
User user = session.selectOne("UserMapper.selectUserById</span>",id);
System.out.println(user);
}
}
正确輸出id=1的記錄