myBatis學習筆記(1)——快速入門
阿新 • • 發佈:2019-01-24
在專案中使用myBatis
- 匯入jar包
- 在src下建立配置檔案
<?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>
<!--
development :開發模式
work: 工作模式
-->
<environments default="development">
<environment id="development">
<!--
JDBC:直接簡單實用了jdbc的提交和回滾
MANAGED:事務交由容器來管理,比如spring容器
-->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3306/bank" />
<property name="username" value="root" />
<property name="password" value="123" />
</dataSource>
</environment >
</environments>
<!-- 對映檔案(所有sql語句都寫在對映檔案中) -->
<mappers>
<mapper resource="userMapper.xml" />
</mappers>
</configuration>
- 建立user實體類
package com.bank.entities;
public class User {
private String username;
private int money;
public User() {
super();
}
public User(String username, int money) {
super();
this.username = username;
this.money = money;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public int getMoney() {
return money;
}
public void setMoney(int money) {
this.money = money;
}
@Override
public String toString() {
return "User [username=" + username + ", money=" + money + "]";
}
}
- 建立userMapper.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="com.bank.userMapper">
<!--
parameterType:入參的型別,可以是實體類或者基本資料型別
如果是實體類,要寫全類名(包含包名)
resultType:返回結果的型別,可以是實體類或者基本資料型別
使用#{name}來表示入參的值
-->
<select id="getUser" parameterType="String"
resultType="com.bank.entities.User">
select * from user where username=#{username}
</select>
<update id="updateUser" parameterType="com.bank.entities.User">
update user set money=#{money} where username=#{username}
</update>
<delete id="deleteUser" parameterType="String">
delete from user where username=#{username}
</delete>
<!-- 如果查詢集合,resultType也是User,myBatis幫我們自動填充到集合裡 -->
<select id="getAll" resultType="com.bank.entities.User">
select * from user
</select>
</mapper>
在對映檔案中,增刪改查分別對應四個標籤
<insert> <delete> <update> <select>
- 寫一個工具類
package com.bank.utils;
import java.io.IOException;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MyBatisUtil {
public static SqlSessionFactory getFactory(){
String resource = "conf.xml";
//載入 mybatis 的配置檔案(它也載入關聯的對映檔案)
Reader reader = null;
try {
reader = Resources.getResourceAsReader(resource);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//構建 sqlSession 的工廠
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
return sessionFactory;
}
}
- 建立DAO
package com.bank.dao;
import java.io.IOException;
import java.io.Reader;
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.springframework.stereotype.Repository;
import com.bank.entities.User;
import com.bank.mapper.UserMapper;
import com.bank.utils.MyBatisUtil;
public class UserDAO {
//增加
public void addUser(User user){
SqlSessionFactory factory = MyBatisUtil.getFactory();
SqlSession session = factory.openSession();
String statement = "com.bank.userMapper.addUser";
session.update(statement, user);
session.commit();
session.close();
}
//刪除
public void deleteUser(String username){
SqlSessionFactory factory = MyBatisUtil.getFactory();
SqlSession session = factory.openSession();
String statement = "com.bank.userMapper.deleteUser";
session.update(statement, username);
session.commit();
session.close();
}
//修改
public void updateUser(User user){
SqlSessionFactory factory = MyBatisUtil.getFactory();
SqlSession session = factory.openSession();
String statement = "com.bank.userMapper.updateUser";
session.update(statement, user);
session.commit();
session.close();
}
//查詢
public User getUser(String username) {
SqlSessionFactory factory = MyBatisUtil.getFactory();
SqlSession session = factory.openSession();
String statement = "com.bank.userMapper.getUser";
User user = session.selectOne(statement, username);
session.close();
return user;
}
//查詢所有
public List<User> queryUsers(){
SqlSessionFactory factory = MyBatisUtil.getFactory();
SqlSession session = factory.openSession();
String statement = "com.bank.userMapper.getAll";
List<User> users = session.selectList(statement);
session.close();
return users;
}
}
- session.commit(),非查詢操作才能起作用。如果不想手動提交,可以使用
SqlSession session = factory.openSession(true);
,這樣可以自動提交- session使用完,記得close()
- statement為對映檔名的 名稱空間+sql標籤語句的id
- 增刪改查,在session中都有對應的方法可以呼叫,大家自己檢視吧。使用方法都是一樣。
使用註解方式
我們可以使用註解的方式代替userMapper.xml配置檔案
- 寫一個UserMapper介面
package com.bank.mapper;
import org.apache.ibatis.annotations.Insert;
import com.bank.entities.User;
public interface UserMapper {
@Insert("insert into user(username,money) values(#{username},#{money})")
void insert(User user);
}
使用註解,把sql語句寫到註解裡
- 在conf.xml檔案中要註冊
<mappers>
<!-- 配置檔案方式 -->
<mapper resource="userMapper.xml" />
<!-- 註解方式 -->
<mapper class="com.bank.mapper.UserMapper"/>
</mappers>
- DAO
public void insert(User user){
SqlSessionFactory factory = MyBatisUtil.getFactory();
SqlSession session = factory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
userMapper.insert(user);
session.commit();
session.close();
}
總結
- 使用myBatis,需要兩個準備步驟:
- 配置conf.xml檔案
- 寫好對映檔案(或者使用註解)
- 做好準備工作好,我們只需要得到SqlSession就能通過sql語句進行資料庫操作了,因此寫一個工具類,供獲取工廠類,通過工廠類得到SqlSession