1.效果圖:
2.Mybatis的步驟:
本內容涉及到mysql資料庫,先去下載一個資料庫,建立一個User表和Article表
Create TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `userName` varchar(50) DEFAULT NULL, `userAge` int(11) DEFAULT NULL, `userAddress` varchar(200) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; Insert INTO `user` VALUES ('1', 'summer', '100', 'shanghai,pudong');Drop TABLE IF EXISTS `article`; Create TABLE `article` ( `id` int(11) NOT NULL auto_increment, `userid` int(11) NOT NULL, `title` varchar(100) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -- 添加幾條測試資料 -- ---------------------------- Insert INTO `article` VALUES ('1', '1', '11111', 'dsgfd'); Insert INTO `article` VALUES ('2', '1', '22222', 'dfsdgds'); Insert INTO `article` VALUES ('3', '1', 'dddd3','dfsfsdfd'); Insert INTO `article` VALUES ('4', '1', 'ddd4', '5555');
2.1先將mybatis-3.2.7.jar和mysql-connector-java-5.1.22-bin.jar兩個需要用到的jar包拷到WEB-INF下面的lib檔案夾
2.2 看上圖中的架構,建立包和類,按順序建立
Article類:
package com.mybatis.model;public class Article {private int id;private User user;private String title;private String content;public int getId() {return id;}public void setId(int id) {this.id = id;}public User getUser() {return user;}public void setUser(User user) {this.user = user;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getContent() {return content;}public void setContent(String content) {this.content = content;}}
User類:
package com.mybatis.model;public class User {private int id; private String userName; private String userAge; private String userAddress;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 String getUserAge() {return userAge;}public void setUserAge(String userAge) {this.userAge = userAge;}public String getUserAddress() {return userAddress;}public void setUserAddress(String userAddress) {this.userAddress = userAddress;}}
IUserOperation介面:
package com.mybatis.interfaces;import com.mybatis.model.*;import java.util.List;public interface IUserOperation {//定義的介面名需與User.xml裡的id值要對應public List<User> getUserList(String userName);public List<Article> getUserAticles(int id);public User selectUserByID(int id);public int insertUserInfo(User user);public int updateUserInfo(User user);public int deleteUserInfo(int id);}
建立User.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.mybatis.interfaces.IUserOperation"> <!-- 通過使用者id返回使用者資訊 --><select id="selectUserByID" parameterType="int" resultType="User">select * from `user` where id = #{id}</select><!-- 返回List而定義的resultMap,注意column是資料庫中定義的欄欄位,而property是我們自訂的欄位,能夠解決屬性和資料庫欄位不一致的問題 --><resultMap type="User" id="resultUserList"><id column="id" property="id"></id><result column="userName" property="userName"/><result column="userAge" property="userAge"/><result column="userAddress" property="userAddress"/></resultMap><!-- 通過使用者名稱返回使用者列表 --><!-- 記住:在擷取List列表的時候,resultMap="resultUserList"千萬別寫成resultType="resultUserList",否則報錯 --><select id="getUserList" parameterType="string" resultMap="resultUserList">select * from `user` where userName like #{userName}</select><!-- 記住type="Article"新加一個class,要去configuration.xml進行別名定義,否則找不到報錯 --><!-- 通過association來關聯user,達到多對一的效果,多篇文章對應一個使用者 --><!-- column="aid"給資料庫列id命了一個別名,區分關聯的id,否則只能查詢出一條資料 --><resultMap type="Article" id="resultUserArticleList"><id column="aid" property="id"></id><result column="title" property="title"/><result column="content" property="content"/> <!-- <association property="user" javaType="User"><id column="id" property="id"></id><result column="userName" property="userName"/><result column="userAddress" property="userAddress"/></association> --><!-- 上面的association等同於下面的這個,前提條件是之前就已經定義過resultUserList --><association property="user" javaType="User" resultMap="resultUserList"></association></resultMap><!-- 擷取使用者的多個文章 --><select id="getUserAticles" parameterType="int" resultMap="resultUserArticleList">select user.id,user.userName,user.userAddress, article.id aid,article.title,article.content from user,article where user.id=article.userid and user.id=#{id}</select> <!-- useGeneratedKeys設定為"true"表明要MyBatis擷取由資料庫自動產生的主鍵;keyProperty="id"指定把擷取到的主索引值注入到User的id屬性 --><insert id="insertUserInfo" parameterType="User" useGeneratedKeys="true" keyProperty="id">insert into `user`(userName,userAge,userAddress) values (#{userName},#{userAge},#{userAddress})</insert><update id="updateUserInfo" parameterType="User">update user set userName=#{userName},userAge=#{userAge},userAddress=#{userAddress} where id=#{id}</update><delete id="deleteUserInfo" parameterType="int">delete from `user` where id=#{id}</delete></mapper><!-- namespace命名空間中的值一定要對應包定義的介面"com.mybatis.interfaces.IUserOperation",否則報錯 -->
建立設定檔configuration.xml
<?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><!-- mybatis別名定義 --><typeAliases><typeAlias alias="User" type="com.mybatis.model.User" /><typeAlias alias="Article" type="com.mybatis.model.Article" /></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis" /><property name="username" value="root" /><property name="password" value="password" /></dataSource></environment></environments><mappers><mapper resource="com/mybatis/model/User.xml" /></mappers></configuration><!-- Ctrl+Shift+F 自動排版 -->
最後開始測試,建立一個測試類別:
package com.mybatis.test;import com.mybatis.interfaces.IUserOperation;import com.mybatis.model.User;import com.mybatis.model.Article;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 java.util.List;public class Test {private static SqlSessionFactory sqlFactory;private static Reader reader;private static User user;private static int Ret;/*static{}(即static塊),會在類被載入的時候執行且僅會被執行一次,一般用來初始化靜態變數和調用靜態方*/static {try {reader = Resources.getResourceAsReader("Configuration.xml");sqlFactory = new SqlSessionFactoryBuilder().build(reader);} catch (Exception e) {e.printStackTrace();}}public static SqlSessionFactory getSession() {return sqlFactory;}//擷取使用者列表public static void GetUserList(List<User> UserList){if(UserList.size()>0){for(User u:UserList){System.out.println("Id:"+u.getId()+";UserName:"+u.getUserName()+";UserAge:"+u.getUserAge()+";UserAddress:"+u.getUserAddress());}}else{System.out.println("使用者不存在。");}}//擷取使用者文章列表public static void GetUserArticle(List<Article> articleList){if(articleList.size()>0){for(Article a:articleList){System.out.println("UserName:"+a.getUser().getUserName()+";UserAddress:"+a.getUser().getUserAddress()+";ArticleTitle:"+a.getTitle()+";ArticleContent:"+a.getContent());}}else{System.out.println("使用者不存在。");}}public static void main(String[] args) {SqlSession session = sqlFactory.openSession();try {IUserOperation operation=session.getMapper(IUserOperation.class);//新增/*user=new User();user.setUserName("Amyli");user.setUserAge("20");user.setUserAddress("Ludun BaLin");Ret=operation.insertUserInfo(user);if(Ret>0){System.out.println("新增成功。");}else{System.out.println("新增失敗。");}*///刪除/*Ret=operation.deleteUserInfo(27);if(Ret>0){System.out.println("刪除成功。");}else{System.out.println("刪除失敗。");}*///修改user = operation.selectUserByID(24);user.setUserAge("23");user.setUserAddress("Chendu SiChuan");Ret=operation.updateUserInfo(user);if(Ret>0){System.out.println("修改成功。");}else{System.out.println("修改失敗。");}session.commit(); //記住,做增刪改操作,一定要記得調用commit提交,否則無效。//查詢user = operation.selectUserByID(24);System.out.println(user.getId());System.out.println(user.getUserName());System.out.println(user.getUserAge());System.out.println(user.getUserAddress());System.out.println("");Test.GetUserList(operation.getUserList("DaLei"));System.out.println("文章:");Test.GetUserArticle(operation.getUserAticles(24));} finally {session.close();}}}
裡面有好幾個細節要注意,具體看代碼,裡面有詳細注釋。
Mybatis代碼下載 :Mybatis代碼