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的记录