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(); }