MyBatis源码分析-IDEA新建MyBatis源码工程
MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的持久層框架。MyBatis 避免了幾乎所有的 JDBC 代碼和手動設置參數(shù)以及獲取結果集。MyBatis 可以對配置和原生Map使用簡單的 XML 或注解,將接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java對象)映射成數(shù)據(jù)庫中的記錄。項目GitHub地址
下載MyBatis源碼,導入到IDEA工程(Maven工程)中,工程結構如下:
在pom.xml中新增如下依賴:
<!-- MySQL相關 --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.38</version> </dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version> </dependency> <dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.6.2</version> </dependency><dependency><groupId>ognl</groupId><artifactId>ognl</artifactId><version>3.1.6</version> </dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.21</version> </dependency><dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>2.2.2</version> </dependency>等待依賴更新完畢后,如果出現(xiàn)了@Override覆蓋接口方法報錯問題,請參考IDEA中 @override報錯的解決方法。
?
MyBatis配置conf.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><settings><setting name="cacheEnabled" value="true"/><setting name="lazyLoadingEnabled" value="false"/><!--setting name="logImpl" value="STDOUT_LOGGING"/--> <!-- 日志 --></settings><typeAliases><typeAlias type="com.luoxn28.dao.User" alias="User"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC" /> <!-- 聲明使用那種事務管理機制 JDBC/MANAGED --><!-- 配置數(shù)據(jù)庫連接信息 --><dataSource type="POOLED"><property name="driver" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://192.168.1.150:3306/xxx" /><property name="username" value="xxx" /><property name="password" value="xxx" /></dataSource></environment></environments><mappers><mapper resource="userMapper.xml"/></mappers></configuration>User類的映射文件userMapper.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.luoxn28.dao.UserDao"><select id="getById" parameterType="int" resultType="User">SELECT * FROM user WHERE id=#{id}; <!-- #{xxx} xxx為類中的數(shù)據(jù)域名稱 --></select><select id="getAll" resultType="com.luoxn28.dao.User">SELECT * FROM user;</select> </mapper>測試代碼:
/*** MyBatis測試類*/ public class TestMain {public static void main(String[] args) throws IOException {String resouce = "conf.xml";//InputStream is = TestMain.class.getClassLoader().getResourceAsStream(resouce);InputStream is = Resources.getResourceAsStream(resouce);// 構建sqlSession工廠SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);SqlSession session = sqlSessionFactory.openSession();/*** 第一種方式: 直接執(zhí)行已映射的 SQL 語句*/String statement = "com.luoxn28.dao.UserDao.getById";User user = session.selectOne(statement, 1);System.out.println(user);System.out.println("---------------------");/*** 第二種方式: 執(zhí)行更清晰和類型安全的代碼*/UserDao userDao = session.getMapper(UserDao.class);user = userDao.getById(1);System.out.println(user);}}User用戶類:
/*** User - 用戶類*/ public class User {public static final int MAN = 0; // 男生public static final int WOMAN = 1; // 女生public static final int OTHER = 2; // 其他private int id; // 用戶idprivate String name; // 用戶名private String password; // 用戶密碼private int sex; // 用戶性別private String email; // 用戶郵箱private String phone; // 用戶手機private String admin; // 用戶是否是管理員,"admin"表示是管理員,其他為普通用戶public User() { }public User(String name, String password, int sex, String email, String phone) {this.name = name;this.password = password;this.sex = sex;this.email = email;this.phone = phone;this.admin = "";}public User(String name, String password, String sex, String email, String phone) {this.name = name;this.password = password;setSex(sex); // this.sex = sex;this.email = email;this.phone = phone;this.admin = "";}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;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public int getSex() {return sex;}public void setSex(int sex) {this.sex = sex;}public void setSex(String sexStr) {int sex = Integer.valueOf(sexStr);switch (Integer.valueOf(sexStr)) {case 0: {this.sex = MAN;break;}case 1: {this.sex = WOMAN;break;}default: {this.sex = OTHER;break;}}}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return phone;}public void setPhone(String phone) {this.phone = phone;}public String getAdmin() {return admin;}public void setAdmin(String admin) {this.admin = admin;}@Overridepublic String toString() {return "User{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +", sex=" + sex +", email='" + email + '\'' +", phone='" + phone + '\'' +", admin='" + admin + '\'' +'}';}} UserUserDao用戶操作類
/*** UserDao - User操作類*/ public interface UserDao {public User getById(int id);public List<User> getAll();}以上示例代碼是用XML來設置映射語句的,當然,也可以用Java注解來做。比如,上面的 XML 示例可被替換如下:
/*** UserDao - User操作類*/ public interface UserDao {@Select("SELECT * FROM user WHERE id=#{id}")public User getById(int id);@Select("SELECT * FROM user")public List<User> getAll();}使用注解時調(diào)用實例:
UserDao userDao = session.getMapper(UserDao.class); user = userDao.getById(1); System.out.println(user);對于簡單語句來說,注解使代碼顯得更加簡潔,然而 Java 注解對于稍微復雜的語句就會力不從心并且會顯得更加混亂。因此,如果你需要做很復雜的事情,那么最好使用 XML 來映射語句。選擇何種方式以及映射語句的定義的一致性對你來說有多重要這些完全取決于你和你的團隊。換句話說,永遠不要拘泥于一種方式,你可以很輕松的在基于注解和 XML 的語句映射方式間自由移植和切換。注意:UserDao接口的getById方法配置了注解,那么就不要XML中配置<select id="getById">xxx</select>了,否則程序會報異常。
?
參考:
1、IDEA中 @override報錯的解決方法
2、MyBatis3中文文檔
轉載于:https://www.cnblogs.com/luoxn28/p/5922457.html
總結
以上是生活随笔為你收集整理的MyBatis源码分析-IDEA新建MyBatis源码工程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一种压缩图片的方法---Machine
- 下一篇: HDU5730 FFT+CDQ分治