Mybatis用法詳解(配置和註解的使用)
阿新 • • 發佈:2019-02-20
mybatis是持久層框架
使用方法(基於xml配置)
1.新增依賴(Maven)<!--資料庫相關, mysql, mybatis--> <!--jdbc連線--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.37</version> </dependency> <!--spring-mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>${mybatis-spring-version}</version> </dependency> <!--mybatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis-version}</version> </dependency> <!--反射生成實體類--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency>
2.建立資料庫、表
CREATE DATABASE testdatabase;
USE testdatabase;
CREATE TABLE user(id INT PRIMARY KEY AUTO_INCREMENT, userName VARCHAR(20) NOT NULL, userAge INT NOT NULL);
INSERT INTO user(userName, userAge) VALUES('Xiaoxin', 21);
INSERT INTO user(userName, userAge) VALUES('Xiaoming', 22);
3.表的實體類
package com.xiaoxin.demo.dto; public class User { private int id; private String userName; private int userAge; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getUserAge() { return userAge; } public void setUserAge(int userAge) { this.userAge = userAge; } @Override public String toString() { return "User [id=" + id + ", userName=" + userName + ", userAge=" + userAge + "]"; } }
4.新增Mybatis的配置檔案
<?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> <typeAlias alias="User" type="com.xiaoxin.demo.dto.User"/> </typeAliases> <!-- 資料庫環境配置--> <environments default="development"> <environment id="development"> <!-- jdbc管理--> <transactionManager type="JDBC"/> <!-- 用什麼連線池--> <dataSource type="POOLED"> <!-- jdbc驅動--> <property name="driver" value="com.mysql.jdbc.Driver"/> <!-- 資料庫名字url--> <property name="url" value="jdbc:mysql://127.0.0.1:3306/testdatabase" /> <!-- 資料庫使用者--> <property name="username" value="root"/> <!-- 資料庫使用者密碼--> <property name="password" value=""/> </dataSource> </environment> </environments> <!-- 把User.xml註冊到mybatis的配置檔案中,User.xml下面配置 --> <mappers> <mapper resource="com/xiaoxin/demo/dto/User.xml"/> </mappers> </configuration>
5.定義操作user表的對映檔案,第四步已經註冊到mybatis的配置檔案中去了
<?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">
<!-- 定義操作user表的sql對映檔案userMapper.xml -->
<mapper namespace="com.xiaoxin.demo.dto">
<select id="selectUserByID" parameterType="int" resultType="User">
select * from `User` where id = #{id}
</select>
</mapper>
6.測試
package com.xiaoxin.demo.dto;
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.junit.Test;
public class TestUser {
@Test
public void testUser() throws Exception{
SqlSessionFactory sqlSessionFactory;
Reader reader;
String resource = "spring/configuration.xml";
//載入一個流
reader= Resources.getResourceAsReader(resource);
//生成sqlSessionFactory工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
User user =(User) session.selectOne("com.xiaoxin.demo.dto.selectUserByID", 1);
System.out.print(user.toString());
session.close();
}
}
連線資料庫成功查詢到資料
CRUD操作彙總
<?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">
<!-- 定義操作users表的sql對映檔案userMapper.xml -->
<mapper namespace="com.xiaoxin.demo.dto">
<!--查詢 -->
<select id="selectUserAll" parameterType="int" resultType="User">
select * from user
</select>
<!--插入 -->
<insert id="insertUser" parameterType="com.xiaoxin.demo.dto.User">
insert into user(userName,userAge) values(#{userName},#{userAge});
</insert>
<!--更新 -->
<update id="updateUser" parameterType="com.xiaoxin.demo.dto.User">
update user set userAge=#{userAge},userName=#{userName} where id=#{id}
</update>
<!--刪除 -->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id}
</delete>
</mapper>
測試
package com.xiaoxin.demo.dto;
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;
public class TestUser {
@Test
public void testUser() throws Exception{
SqlSessionFactory sqlSessionFactory;
Reader reader;
String resource = "spring/configuration.xml";
//載入一個流
reader= Resources.getResourceAsReader(resource);
//生成sqlSessionFactory工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
//插入
// User user1 = new User();
// user1.setUserName("Xiaohong");
// user1.setUserAge(20);
// session.insert("com.xiaoxin.demo.dto.insertUser", user1);
// // session.commit();一定要執行不然在資料庫中沒有資訊!!!!!
// session.commit();
//更新
//把Xiaohong的姓名改為Xiaohong101年齡改為44 Xiaohong的id是13
// User user3 = new User();
// user3.setUserName("Xiaohong101");
// user3.setUserAge(44);
// user3.setId(16);
// session.update("com.xiaoxin.demo.dto.updateUser",user3);
// session.commit();
//刪除
session.delete("com.xiaoxin.demo.dto.deleteUser",16);
session.commit();
//查詢資料庫全部的資訊
List<User> user2 = session.selectList("com.xiaoxin.demo.dto.selectUserAll");
for(User user:user2){
System.out.println(user.toString());
}
session.close();
}
}
以上自己測試過全部成功,但是xml的配置過程中自己出錯了很多,除錯了很多次才成功調試出來,下面學習基於註解的寫法
Mybatis的註解用法
1.定義SQL對映的介面package com.xiaoxin.demo.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import com.xiaoxin.demo.dto.User;
public interface UserMapper {
@Select("select * from user")
public List<User> getSelectUser();
@Update("UPDATE user set userName=#{userName},userAge=#{userAge} where id=#{id}")
public void getUpdateUser(User user);
@Insert("insert into user(userName,userAge) values(#{userName},#{userAge});")
public void getInsertUser(User user);
@Delete("DELETE FROM user where id=#{id}")
public void getDeleteUser(int id);
}
2.在mybatis的配置檔案中註冊這個對映介面(注意是class!!)
<mappers>
<mapper resource="com/xiaoxin/demo/dto/User.xml"/>
<mapper class="com.xiaoxin.demo.mapper.UserMapper"></mapper>
</mappers>
在Dao類中呼叫(這裡是測試)
package com.xiaoxin.demo.dto;
import java.io.IOException;
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.xiaoxin.demo.mapper.UserMapper;
public class TestUserAnnotation {
@Test
public void testUser() throws IOException{
SqlSessionFactory sqlSessionFactory;
Reader reader;
String resource = "spring/configuration.xml";
//載入一個流
reader= Resources.getResourceAsReader(resource);
//生成sqlSessionFactory工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession session = sqlSessionFactory.openSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
//插入
// User user = new User();
// user.setUserName("xinxin");
// user.setUserAge(20);
// userMapper.getInsertUser(user);
// session.commit();
//刪除
// userMapper.getDeleteUser(21);
// session.commit();
//更新將id為19的姓名不變 年齡改為23
// User user = new User();
// user.setId(19);
// user.setUserName("xinxin");
// user.setUserAge(23);
// userMapper.getUpdateUser(user);
// session.commit();
//查詢
List<User> users = userMapper.getSelectUser();
for(User user2 :users){
System.out.println(user2.toString());
}
session.close();
}
}
測試成功