configuration 配置 properties 屬性 settings 設置 typeAliases 類型別名 typeHandlers 類型處理器 objectFactory 對象工廠 plugins 插件 environments 環境 environment 環境變量 transactionManager 事務管理器 dataSource 數據源 databaseIdProvider 數據庫廠商標識 mappers 映射器
配置一些常見變量,相似於spring中placeholder的做用。通常能夠用來引入數據庫配置、 java
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/ssm username=root password=123456
ypeHandlers稱作類型處理器。就是實現Java類型和數據庫類型之間轉換的。 除了系統提供的類型轉換器以外,開發者也能夠自定義類型轉換,以下:mysql
例如List<—>VARCHAR之間的類型轉換:spring
package com.sxt.myList; import java.sql.CallableStatement; import java.sql.JDBCType; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; import java.util.List; import org.apache.ibatis.type.BaseTypeHandler; import org.apache.ibatis.type.JdbcType; import org.apache.ibatis.type.MappedJdbcTypes; import org.apache.ibatis.type.MappedTypes; /** * 自定義轉換器,集合,字符串 * @author Administrator * */ @MappedJdbcTypes(JdbcType.VARCHAR) @MappedTypes(List.class) public class MyList extends BaseTypeHandler<List<String>>{ /** * 將集合數據轉換成字符牀 */ @Override public void setNonNullParameter(PreparedStatement ps, int i, List<String> parameter, JdbcType jdbcType) throws SQLException { StringBuilder sb = new StringBuilder(); for (String s : parameter) { sb.append(s).append(";"); } String msg = sb.toString(); ps.setString(i, msg); } /** * 從集合裏取出字符串轉換成集合 */ @Override public List<String> getNullableResult(ResultSet rs, String columnName) throws SQLException { String st = rs.getString(columnName); return Arrays.asList(st.split(";")); } @Override public List<String> getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String st = rs.getString(columnIndex); return Arrays.asList(st.split(";")); } @Override public List<String> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { // TODO Auto-generated method stub return null; } }
package com.sxt.bean; import java.util.List; public class Student { private Integer id; private String name; private List<String> games; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<String> getGames() { return games; } public void setGames(List<String> games) { this.games = games; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", games=" + games + "]"; } }
<?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.sxt.dao.StudentDao"> <select id="query" resultType="student"> select * from t_student </select> <insert id="add" parameterType="student"> insert into t_student(name,games)values(#{name},#{games}) </insert> </mapper>
package com.sxt.dao; import java.util.List; import com.sxt.bean.Student; public interface StudentDao { public List<Student> query(); public int add(Student stu); }
<?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="db.properties" /> <typeAliases> <package name="com.sxt.bean" /> </typeAliases> <typeHandlers> <typeHandler handler="com.sxt.myList.MyList" /> </typeHandlers> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> </dataSource> </environment> </environments> <!-- 註冊映射文件 --> <mappers> <package name="com.sxt.dao" /> </mappers> </configuration>
映射器:咱們添加的SQL語句的映射文件要被配置文件可以發現,在自動發現方面mybatis在這方面並無實現,因此咱們須要經過mapper標籤來關聯映射文件。sql
方式一:一個個掃描數據庫
<!-- 註冊映射文件 --> <mappers> <mapper resource="com/sxt/dao/UserMapper.xml"/> </mappers>
這種配置方式,對mapper的文件名沒有要求apache
方式二:掃描包 更簡單更經常使用的方式,則是經過包掃描去加載mapper文件,這個時候對mapper文件名有要求,要求mapper文件名和mapper接口必須一致。session
<!-- 註冊映射文件 --> <mappers> <!-- <mapper resource="com/sxt/dao/UserMapper.xml"/> --> <package name="com.sxt.dao"/> </mappers>
<typeAliases> <typeAlias type="com.sxt.bean.User" alias="user"/> </typeAliases>
能夠批量掃描,自動生成別名,自動生成的別名是類型或者類名首字母小寫mybatis
<typeAliases> <!-- <typeAlias type="com.sxt.bean.User" alias="user"/> --> <package name="com.sxt.bean"/> </typeAliases>
注意自定義的別名使用的時候不區分大小寫app
@Test public void query() { SqlSession session = Dbutils.getSession(); StudentDao mapper = session.getMapper(StudentDao.class); //查詢 List<Student> query = mapper.query(); System.out.println(query); //添加 Student user = new Student(); user.setName("zhangsan"); user.setGames(Arrays.asList("x","m","n")); mapper.add(user); session.commit(); session.close(); }