最近研究了一些MyBatis技術,雖然工作中還未用到,但是覺得了解一下也是不錯的.這里記錄了第一個簡單的Demo程序,防止自己忘記.
第一步需要配置Mybatis-config.xml文件.注意:這里使用了2種方式對實體類進行了映射.在<Mapper>中,第一個User對象用XMl格式進行映射,第二個Category用注解CategoryMappper格式進行映射.
<?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> <PRoperties resource="jdbc.properties" ></properties> <!-- <typeAliases> <package name="com.mybatis02.model"/> </typeAliases> --> <environments default="devEnvironment"> <environment id="devEnvironment"> <transactionManager type="JDBC"></transactionManager> <dataSource type="POOLED"> <property name="driver" value="${dirver}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="passWord" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!-- 利用XML格式對User對象進行映射 --> <mapper resource="com/mybatis02/model/User.xml"/> <!-- 用注解模式對Category進行映射 --> <mapper class="com.mybatis02.mapper.CategoryMapper"/> </mappers></configuration>
第二步對mybatis-config.xml進行解析
public class MyBatisUtil { private static SqlsessionFactory factory; static{ try { InputStream in = Resources.class.getResourceAsStream("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(in); } catch (Exception e) { e.printStackTrace(); } } public static SqlSession createSession(){ return factory.openSession(); } public static void closeSession(SqlSession session){ if (session != null) { session.close(); } }}
下面分2中方式,對xml格式和注解方式分別進行介紹:
XML格式:
1.1.創建實體類User(這里省略了get和set方法)
public class User { private int id; private String username; private String password; private String nickname; private int type; private List<Address> addresses; ...}
1.2.創建User對象的xml映射文件.這里需要注意:namespace屬性,需要配置User類的全路徑.定義了一個id為add的Insert操作.其參數類型(parameterType)為一個User對象
<?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.mybatis02.model.User"> <insert id="add" parameterType="com.mybatis02.model.User"> insert t_user(id,username,password,nickname,type) values(#{id},#{username},#{password},#{nickname},#{type}) </insert></mapper>
1.3.對XML映射方式進行測試
@Test public void testAdd() { // 1.創建Mybatis配置文件輸入流 InputStream in = null; try { in = Resources.getResourceAsStream("mybatis-config.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 2.創建SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 3.創建SQlSession SqlSession session = factory.openSession(); // 4.調用UserMapper文件,將對象插入數據庫(在調用文件之前,需要將mapper文件加入到mybatis-config.xml中) User user = new User(); user.setId(8); user.setUsername("張飛"); user.setPassword("123"); user.setNickname("張三"); user.setType(1); session.insert("com.mybatis02.model.User.add", user); session.commit(); session.close(); }
對注解映射方式進行demo的編寫.
2.1.同樣創建實體類
public class Category { private int id; private String name; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
2.2 創建CategoryMapper映射類 創建了一個add方法,在方法上添加Insert操作,執行對應的sql.
這個文件在第一步中的mybatis-config.xml中引入.
<mapper class="com.mybatis02.mapper.CategoryMapper"/>
public interface CategoryMapper { @Insert("insert into t_category(id,name) value (#{id},#{name})") public void add(Category category); }
2.3 測試
@Test public void testCategory() { // 1.創建Mybatis配置文件輸入流 InputStream in = null; try { in = Resources.getResourceAsStream("mybatis-config.xml"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 2.創建SqlSessionFactory SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in); // 3.創建SQlSession SqlSession session = factory.openSession(); // 4.調用CategoryMapper接口,將對象插入數據庫(在調用文件之前,需要將mapper文件加入到mybatis-config.xml中) Category category = new Category(); category.setId(1); category.setName("衣服"); session.insert("com.mybatis02.mapper.CategoryMapper.add", category); session.commit(); session.close(); }
感觸:最開始寫demo,報了一個錯誤,原來我把xml方式映射和注解方式映射弄混了.兩種方式各取一半,報了各種錯誤.
以后遇到問題,需要一步一步的推敲.保持邏輯的清晰,才能更加準確的定位錯誤,及時發現和修正錯誤.
|
新聞熱點
疑難解答