mybatis入門-實作基本CRUD操作
閑着沒事,整理整理初學mybatis時候的筆記。另外上傳了mybatis的jar包(包括開發jar包以及源代碼jar),首先,建立一個java project,建立一個lib檔案夾,放入mybatis的jar包跟mysql驅動的jar包,add to build path...。整體效果截圖如下:

然後,建立包目錄結構和mybatis的配置檔案,如上圖所示。下面是User實體類:
package com.steadyjack.model;
public class User {
private Integer id;
private String userName;
private int age;
private String address;
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 int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", age=" + age
+ ", address=" + address + "]";
}
}
建立資料庫表:
CREATE Database mybatis
use mybatis
CREATE TABLE `tb_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`userName` varchar(255) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
INSERT INTO `tb_user` VALUES ('1', 'jack', '12', 'foshan');
INSERT INTO `tb_user` VALUES ('2', 'sam', '21', 'guagnzhou');
INSERT INTO `tb_user` VALUES ('3', 'jerry', '22', 'sichuang');
INSERT INTO `tb_user` VALUES ('4', 'silly', '23', 'chengdu');
INSERT INTO `tb_user` VALUES ('8', 'july', '24', 'beijing');
mybatis-config.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>
<!-- 别名 -->
<typeAliases>
<package name="com.steadyjack.model"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<!-- url中還配置了字元編碼,防止插入中文到資料庫時候出現亂碼,注意用&代替&; -->
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/steadyjack/mappers/userMapper.xml" />
</mappers>
</configuration>
建立UserDao:
package com.steadyjack.mappers;
import java.util.List;
import com.steadyjack.model.User;
/**
* 面向接口程式設計
* @author android
*
*/
public interface UserDao {
public User getUserById(Integer id);
public List<User> getUserList(User user);
public void addUser(User user);
public int updateUser(User user);
public int deleteUser(Integer id);
}
建立UserMapper,其實就是UserDao的實作(從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="com.steadyjack.mappers.UserDao">
<resultMap type="User" id="resultListUser">
<id column="id" property="id" />
<result column="userName" property="userName" />
<result column="age" property="age" />
<result column="address" property="address" />
</resultMap>
<select id="getUserById" parameterType="Integer" resultMap="resultListUser">
select * from tb_user where id = #{id}
</select>
<select id="getUserList" parameterType="User" resultMap="resultListUser">
<!-- select * from tb_user where userName like "%"#{userName}"%" -->
select * from tb_user
<where>
<if test="userName!=null">
<!-- and userName like "%"#{userName}"%" and mybatis會自動去掉的 -->
userName like "%"#{userName}"%"
</if>
<if test="address!=null">
or address like "%"#{address}"%"
</if>
</where>
</select>
<insert id="addUser" parameterType="User">
insert into tb_user(userName,age,address) values(#{userName},#{age},#{address})
</insert>
<update id="updateUser" parameterType="User">
<!-- update tb_user set userName=#{userName},age=#{age},address=#{address} where id=#{id} -->
update tb_user set
<set>
<if test="userName!=null">
userName=#{userName},
</if>
<if test="address!=null">
address=#{address}
</if>
</set>
where id=#{id}
</update>
<delete id="deleteUser" parameterType="Integer">
delete from tb_user where id=#{id}
</delete>
</mapper>
最後是UserTest,測試接口中的各個方法:
package com.steadyjack.test;
import java.io.IOException;
import java.io.InputStream;
import java.io.Reader;
import java.util.List;
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.Test;
import com.steadyjack.mappers.UserDao;
import com.steadyjack.model.User;
public class UserTest {
private static SqlSessionFactory sessionFactory;
//private static Reader reader;
private static final String loaction="mybatis-config.xml";
static{
try {
//getResourceAsReader 發現底層實作的原理還是InputSteamReader(inputstream來實作的)
//reader=Resources.getResourceAsReader("mybatis-config.xml");
//sessionFactory = new SqlSessionFactoryBuilder().build(reader);
InputStream stream=UserTest.class.getClassLoader().getResourceAsStream(loaction);
sessionFactory=new SqlSessionFactoryBuilder().build(stream);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static SqlSessionFactory getSession(){
return sessionFactory;
}
@Test
public void testGet(){
SqlSession session=sessionFactory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=userDao.getUserById(4);
System.out.println(user);
}
@Test
public void testQueryList(){
SqlSession session=sessionFactory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User();
user.setAddress("州");
List<User> userList=userDao.getUserList(user);
for (User u : userList) {
System.out.println(u);
}
}
@Test
public void testAdd(){
SqlSession session=sessionFactory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=new User();
user.setUserName("j");
user.setAge(12);
user.setAddress("f");
try {
userDao.addUser(user);
session.commit();
System.out.println("id: "+user.getId());
} catch (Exception e) {
System.out.println("送出事務發生異常: "+e.getMessage());
} finally{
session.close();
}
}
@Test
public void testUpdate(){
SqlSession session=sessionFactory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
User user=userDao.getUserById(12);
System.out.println("原先的User: "+user);
if (user!=null) {
user.setUserName("steayjack");
user.setAge(25);
user.setAddress("上海");
int res=0;
try {
res=userDao.updateUser(user);
session.commit();
System.out.println("送出成功: "+user.getId()+" -- 操作傳回結果: "+res);
} catch (Exception e) {
System.out.println("送出事務發生異常:"+e.getMessage());
} finally{
session.close();
}
}else{
throw new RuntimeException("沒有該使用者!");
}
}
@Test
public void testDelete(){
SqlSession session=sessionFactory.openSession();
UserDao userDao=session.getMapper(UserDao.class);
try {
int res=userDao.deleteUser(5);
System.out.println("執行結果:"+res);
session.commit();
} catch (Exception e) {
System.out.println("送出事務發生異常: "+e.getMessage());
} finally{
session.close();
}
}
}
沒有涉及到什麼關聯映射之類的(其實,我在公司中實際的項目是不做實際的資料庫關聯的!)
好了,就介紹到這裡吧!我覺得這樣入門的話,賊簡單的!!!!後期會來一個spring springmvc mybatis的整合案例!!!