【Mybatis】從安裝到簡單demo
阿新 • • 發佈:2018-12-25
一、Mybatis是什麼?
是一個持久層的框架,學習成本較低,使用sql語言。
二、Mybatis匯入jar包與配置檔案
2.1.1匯入jar包
需要mybatis的一系列jar包,jdbc jar包,mysql jar包。
額外的,非必要的是log4j.jar
2.2.1配置檔案
1.對映配置檔案
<?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> <environments default="development"> <environment id="development"> <!-- 使用jdbc事務管理 --> <transactionManager type="JDBC" /> <!-- 資料庫連線池 --> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8" /> <property name="username" value="root" /> <property name="password" value="a" /> </dataSource> </environment> </environments> <!-- 這個地方配置實體類sql對映檔案 --> <mappers> <mapper resource="MapConfig\UserMapper.xml"/> </mappers> </configuration>
2.配置實體類的sql對映檔案
<?xml version="1.0" encoding="UTF-8" ?> <!-- 注意不要弄錯了,配置檔案是config,這個是對映mapper --> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- 加上名稱空間,可以起到隔離作用 --> <mapper namespace="UserMapper"> <!-- id作為sql的一個唯一標示,parameterType是入參型別。框架會自動填充物件中的屬性到sql語句中。實體類屬性應與資料庫中欄位名相同。也可以有更高階的做法。這裡先說簡單的demo --> <insert id="addUser" parameterType="com.test.domain.User"> insert into User (id,username) values (#{id},#{username}) </insert> <update id="updateUser" parameterType="com.test.domain.User" > update user set username = #{username} where id =#{id} </update> <delete id="deleteUser" parameterType="Integer"> delete from user where id = #{id} </delete> <!-- resultType是返回值型別 --> <select id="selectUser" parameterType="Integer" resultType="com.test.domain.User"> select id, username from user where id = #{id} </select> <select id="selectLikeUser" parameterType="String" resultType="com.test.domain.User"> select id, username from user where username like '%${value}%' </select> <select id="selectAllUser" resultType="com.test.domain.User"> select id, username from user </select> </mapper>
三、Mybatisdemo完成
1.實體類
package com.test.domain; public class User { private int id; private String username; private String password; public String getPassword() { return password; } public void setPassword(String Password) { this.password = Password; } 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; } @Override public String toString() { return "User [id=" + id + ", username=" + username + "]"; } public User(int id, String username) { super(); this.id = id; this.username = username; } public User() { super(); } }
2.測試類
package com.test.dao;
import java.io.IOException;
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.test.domain.User;
public class UserDao {
@Test
public void addUser() throws Exception {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = new User(2,"zs");
sqlSession.insert("UserMapper.addUser", user);
sqlSession.commit();
sqlSession.close();
}
@Test
public void deleteUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
session.delete("UserMapper.deleteUser", 1);
session.commit();
session.close();
}
@Test
public void updateUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
User user = new User(1,"zs1");
session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
session.commit();
session.close();
}
@Test
public void selectUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
//session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
Object user1 = session.selectOne("UserMapper.selectUser", 1);
System.out.println(user1);
session.commit();
session.close();
}
@Test
public void selectAllUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
//session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
List<User> userList = session.selectList("UserMapper.selectAllUser");
for (User user : userList) {
System.out.println(user);
}
session.commit();
session.close();
}
@Test
public void selectLikeUser() throws IOException {
SqlSessionFactoryBuilder sessionFactory = new SqlSessionFactoryBuilder();
SqlSessionFactory sqlSessionFactory = sessionFactory.build(Resources.getResourceAsStream("sqlMapConfig.xml"));
SqlSession session = sqlSessionFactory.openSession();
//session.update("UserMapper.updateUser", user);
//session.delete("UserMapper.deleteUser", 1);
List<User> userList = session.selectList("UserMapper.selectLikeUser","z");
for (User user : userList) {
System.out.println(user);
}
session.commit();
session.close();
}
}
四、編寫demo中遇到的問題及解決方法
下面都是:序號+解決方法+遇到的問題報錯
1.正確配置xml的檔案頭。配置頭中主要的不同部分是config和Mapper
Mapped Statements collection does not contain value for UserMapper.addUser
並且還要在配置檔案中包含對映檔案。
2.新增資料庫中已存在的資訊。(表中有主鍵,如ID為1,再新增ID為1的記錄)
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'
3.把ResultType誤寫成ResultMap。ResultType是直接自動對映類的屬性和表的欄位,需要同名。ResultMap是一種手動配置類的屬性和表字段的對映。
Mapped Statements collection does not contain value for UserMapper.selectLikeUser