MyBatis 本是apache的一个开源项目iBatis。
MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
下面是一个简单的ibatis实例:
项目目录结构如下:
此项目使用了maven,在pom.xml中定义了jar包依赖,方便管理所需jar包。
pom.xml文件中jar包依赖如下:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
</dependency>
<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.34</version>
</dependency>
<dependency>
<groupId>org.apache.ibatis</groupId>
<artifactId>ibatis-sqlmap</artifactId>
<version>2.3.0</version>
</dependency>
</dependencies>
此实例使用mysql数据库,数据库表结构如下:
实体类 User.java
private int id;
private String name;
private int age;
//seters and geters
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", age = " + age + "]";
}
UserDao.java
import java.util.List;
import com.entity.User;
public interface UserDao {
public void insertUser(User user);
public List<User> selectAllUser();
public User selectUserById(int id);
public void deleteUserById(int id);
public void updateUser(User user);
}
UserDaoImpl.java
import java.io.IOException;
import java.io.Reader;
import java.sql.SQLException;
import java.util.List;
import org.apache.ibatis.io.Resources;
import com.entity.User;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class UserDaoImpl implements UserDao {
private static SqlMapClient sqlMapClient = null;
private List<User> userList;
private User user;
//静态块在类加载时会执行
static {
try {
Reader reader = Resources.getResourceAsReader("config/ibatis/SqlMapConfig.xml");
sqlMapClient = SqlMapClientBuilder.buildSqlMapClient(reader);
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//插入用户
public void insertUser(User user) {
try {
sqlMapClient.insert("insertUser",user);
} catch (SQLException e) {
e.printStackTrace();
}
}
//查询所有用户
public List<User> selectAllUser() {
try {
userList = sqlMapClient.queryForList("selectAllUser");
} catch (SQLException e) {
e.printStackTrace();
}
return userList;
}
//根据id查询用户
public User selectUserById(int id) {
try {
user = (User) sqlMapClient.queryForObject("selectUserById",id);
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
//根据id删除用户
public void deleteUserById(int id) {
try {
sqlMapClient.delete("deleteUserById", id);
} catch (SQLException e) {
e.printStackTrace();
}
}
//更新用户
public void updateUser(User user) {
try {
sqlMapClient.update("updateUser", user);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver" />
<property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/mybatis" />
<property name="JDBC.Username" value="root" />
<property name="JDBC.Password" value="" />
</dataSource>
</transactionManager>
<!-- 配置多个实体映射文件 -->
<sqlMap resource="config/ibatis/user/User.xml" />
</sqlMapConfig>
User.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
"http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap namespace="USER">
<typeAlias alias="User" type="com.entity.User" />
<select id="selectAllUser" resultClass="User">
select * from users
</select>
<select id="selectUserById" parameterClass="int" resultClass="User">
select * from users where id=#id#
</select>
<insert id="insertUser" parameterClass="User">
insert into users(name,age) values (#name#,#age#)
</insert>
<delete id="deleteUserById" parameterClass="int">
delete from users where id = #id#
</delete>
<update id="updateUser" parameterClass="User">
update users set name = #name#,age = #age# where id = #id#
</update>
</sqlMap>
测试类:
MyBatisDemoTest.java
package com.test;
import java.util.List;
import org.junit.Test;
import com.dao.UserDao;
import com.dao.UserDaoImpl;
import com.entity.User;
public class MyBatisDemoTest {
private UserDao userDaoImpl;
private List<User> userList;
private User user;
//测试插入用户
@Test
public void testInsertUser() {
userDaoImpl = new UserDaoImpl();
user = new User();
user.setName("marry");
user.setAge(21);
userDaoImpl.insertUser(user);
}
//测试查询所有用户
@Test
public void testSelectAll() {
userDaoImpl = new UserDaoImpl();
userList = userDaoImpl.selectAllUser();
for (User user : userList) {
System.out.println(user);
}
}
//测试根据id查询用户
@Test
public void testSelectUserById() {
userDaoImpl = new UserDaoImpl();
user = userDaoImpl.selectUserById(1);
System.out.println(user);
}
//测试根据id删除用户
@Test
public void testDeleteUserById() {
userDaoImpl = new UserDaoImpl();
userDaoImpl.deleteUserById(4);
}
//测试更新用户
@Test
public void testUpdateUser() {
user = new User();
userDaoImpl = new UserDaoImpl();
user.setId(2);
user.setName("jeny");
user.setAge(30);
userDaoImpl.updateUser(user);
}
}
所有方法均测试通过。
代码下载地址:http://download.csdn.net/detail/lg930503/9391075