最近問答重構,發現DAO層仍是在使用ibatis,以前使用過MyBatis,相比iBatis有了不少進步,趁着此次重構,把iBatis完全換成MyBatis,一勞永逸...html
說說MyBatisjava
官方站點:http://www.mybatis.org/mysql
GitHub站點:http://mybatis.github.com/mybatis-3/index.htmlgit
Google站點:https://code.google.com/p/mybatis/github
iBatis退休聲明:http://ibatis.apache.org/sql
CREATE TABLE USER ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(20), create_time DATETIME, PRIMARY KEY (id) ) ENGINE = innodb DEFAULT CHARSET = utf8;
INSERT INTO user (name, create_time) VALUES ('劉一', current_timestamp); INSERT INTO user (name, create_time) VALUES ('陳二', current_timestamp); INSERT INTO user (name, create_time) VALUES ('張三', current_timestamp); INSERT INTO user (name, create_time) VALUES ('李四', current_timestamp); INSERT INTO user (name, create_time) VALUES ('王五', current_timestamp); INSERT INTO user (name, create_time) VALUES ('趙六', current_timestamp); INSERT INTO user (name, create_time) VALUES ('孫七', current_timestamp); INSERT INTO user (name, create_time) VALUES ('周八', current_timestamp); INSERT INTO user (name, create_time) VALUES ('吳九', current_timestamp); INSERT INTO user (name, create_time) VALUES ('鄭十', current_timestamp);
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.20</version> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.1.1</version> </dependency>
package org.xiuyuan.mybatis.demo.domain; public class User { private Integer id; private String name; private Date createTime; // getter, setter方法略 }
package org.xiuyuan.mybatis.demo.mapper; public interface UserMapper { List<User> findAll(); }
.mybatis.demo
.mapper包下。
<?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="org.xiuyuan.mybatis.demo.mapper.UserMapper ">
<select id="findAll" resultType="User"> select * from user </select> </mapper>
注意:數據庫
1.mapper文件名(UserMapper.xml)要和上一步的接口名一致;apache
2.namespace屬性必須爲上一步接口的全類名:org.xiuyuan.mybatis.demo
.mapper.UserMappermybatis
<configuration> <properties resource="database.properties"/> <settings> <setting name="mapUnderscoreToCamelCase" value="true"/> </settings> <typeAliases> <package name="org.xiuyuan.mybatis.demo.mapper.domain"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${database.driverClassName}"/> <property name="url" value="${database.url}"/> <property name="username" value="${database.username}"/> <property name="password" value="${database.password}"/> </dataSource> </environment> </environments> <mappers> <package name="org.xiuyuan.mybatis.demo.mapper.mapper"/> </mappers> </configuration>
說明:app
1.src/main/resources/database.properties 數據庫配置文件.
2.typeAliases顧名思義,是類型的別名,這裏配置爲第二步domain類的包名,這樣mybatis的mapper文件中就能夠直接寫類名,沒必要寫類的全名。
3.mappers配置第三步dao層接口類的包名,告訴mybatis接口類及mapper文件的位置。
4.mapUnderscoreToCamelCase參數用於將下劃線的命名格式轉換爲駝峯命名,如表字段名create_time,在domain類中定義爲createTime,執行sql語句後,mybatis會自動把create_time轉換爲createTime,省去了寫sql時指定別名的麻煩。
至此,代碼編寫完成,如今編寫測試用例:
public class MyBatisTest { @Test public void test() throws IOException { String resource = "mybatis-config.xml"; InputStream inputStream = Resources.getResourceAsStream(resource); SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); SqlSession sqlSession = sqlSessionFactory.openSession(); try { // 經過selectList查詢 List<User> userList = sqlSession.selectList(UserMapper.class.getName() + ".findAll"); for (User user : userList) { logger.debug(user.toString()); } logger.debug("-----------------------------------"); // 經過接口類查詢 UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> users = mapper.findAll(); for (User user : users) { logger.debug(user.toString()); } } finally { sqlSession.close(); } } }
User{id=1, name='劉一', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=2, name='陳二', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=3, name='張三', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=4, name='李四', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=5, name='王五', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=6, name='趙六', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=7, name='孫七', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=8, name='周八', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=9, name='吳九', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=10, name='鄭十', createTime=Wed Mar 06 20:30:54 CST 2013} ------------------------------------------------------------------------ User{id=1, name='劉一', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=2, name='陳二', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=3, name='張三', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=4, name='李四', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=5, name='王五', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=6, name='趙六', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=7, name='孫七', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=8, name='周八', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=9, name='吳九', createTime=Wed Mar 06 20:30:54 CST 2013} User{id=10, name='鄭十', createTime=Wed Mar 06 20:30:54 CST 2013}