今日內容:Mybatis數據持久層的一種表現,在必定程度上,取代了jdbc。前端
MyBatis開發的大致步驟:java
1.建maven......在pom.xml中進行配置,添加Mybatis包,junit測試jar包,添加鏈接mysql的數據庫包mysql
2.在resources中配置SqlMapperConfig.xml文件,它的做用是配置數據庫鏈接相關信息,主要用於數據庫中不變的信息,另外裏面有個mappers標籤,再裏面有個userMapper.xml,裏面能夠有多個表。sql
3.userMapper.xml主要用於一些變化的信息,主要是操做信息,如增刪改查。數據庫
4.建庫建表。apache
5.建一個bean包,依據數據庫中的表的字段來定義對應屬性的類(實體類、即數據存儲的模型),用於存儲數據庫中的內容,和數據庫的表對應,在必定程度上也和前端頁面對應。session
6.建一個dao包,定義個接口UserDao,裏面定義了一些抽象方法,主要是增刪改查等。mybatis
package cn.sjl.dao; /**在UserDao接口中定義方法*/ import java.util.List; import cn.sjl.bean.User; public interface UserDao{ void insertUser(User user); void updateUser(User user); void deleteUserById(Integer id); //刪除對象 依據id User selectUserById(Integer id); //查詢對象 依據id; 返回值爲User類數據類型 List<User> selectAll(); //查詢全部集合對象記錄裏全部的數據 }
7.同時在dao包中,定義一個實現UserDaoImpl類,裏面主要是實現類,實現接口中的抽象方法,如app
public class UserDaoImpl implements UserDao{ public void insertUser(User user) { //sqlSession(有點相似Connection) SqlSession session=SqlSessionUtil.getSession(); //去工廠拿?再看看書關於SqlSession session.insert("userDao.addUser",user); //找到固定節點並插入值(記錄對象) ??看看書,並看看代碼底層方法; session.commit(); //手動提交 session.close(); //結束session會話 } }
8.其中的共有的,不變的部分抽出來了,並用static修飾,即當類被加載時就能夠執行。框架
//語法結構等價於DBUtils
package cn.sjl.util; import java.io.InputStream; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import cn.sjl.dao.UserDaoImpl; public class SqlSessionUtil { private static SqlSessionFactory ssf; static { //讀配置文件 InputStream in=UserDaoImpl.class.getClassLoader().getResourceAsStream("SqlMapperConfig.xml"); //SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(in);//??10:52 } //返回sqlSession對象 public static SqlSession getSession() { return ssf.openSession(); } }
//看一下舊書和厚書;
9.編寫映射文件,以下面這個插入操做:
<mapper namespace="userDao"> <!-- 插入user對象 --> <!-- void insertUser(User user) --> <!-- 1.insert表示定義insert語句的節點 2.id表節點的名稱,值惟一 3.parameterType表示定義的是參數的類型 4.#{name}表示從user對象中取出name屬性值, 給username字段賦值 --> <insert id="insertUser" parameterType="cn.sjl.bean.User"> insert into t_user( username,password,phone,email ) values ( #{name},#{password},#{phone},#{email} ) </insert>
------------------------------------------------------------------------------------------------------
package test; import org.junit.Test; import cn.sjl.bean.User; import cn.sjl.dao.UserDao; import cn.sjl.dao.UserDaoImpl; public class TestUser { @Test public void testInsert() { UserDao userDao=new UserDaoImpl(); User user=new User(); user.setUsername("張三"); user.setPassword("146557"); user.setEmail("zhangsan@sjl.cn"); user.setPhone("153646646"); userDao.insertUser(user); } }
//單元測試,寫一點測試一點,不建議全部的都到最後再測試。
//多練習
//另外還有一種方法不用寫實現類,mybatis框架自動添加
##10.測試類中
public void testInsert(){ SqlSession session = SqlSessionUitl.getSession(); //經過getMapper獲取AddressDao的實現類對象 AddressDao addressDao = session.getMapper(AddressDao.class); //namespace.id Address address = new Address(); address.setProvince("北京市"); address.setCity("市轄區"); address.setArea("海淀區"); address.setUserAddress("中鼎大廈7層"); addressDao.insert(address); //提交事務 session.commit(); //關閉session session.close(); }