可以将一些配置文件单独的写在属性properties文件中,例如数据库连接的一些信息
#db.properties
jdbc.username=root
jdbc.password=yzgylq
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.driver=com.mysql.jdbc.Driver
<!--SqlMapConfig的配置-->
<properties resource="db.properties"></properties>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<!--mybatis的数据库连接池默认是什么-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
</dataSource>
</environment>
</environments>
<properties>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="yzgylq"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
</properties>
<environments default="default">
<environment id="default">
<transactionManager type="JDBC"></transactionManager>
<!--mybatis的数据库连接池默认是什么-->
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<property name="url" value="${jdbc.url}"/>
</dataSource>
</environment>
</environments>
在SqlMapConfig中定义了如下的properties属性
<properties>
<property name="jdbc.username" value="root"/>
<property name="jdbc.password" value="yzgylq"/>
<property name="jdbc.url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="id" value="40"/>
</properties>
在userMapper中就可以这样获取id的值,用于根据id查询
<mapper namespace="test" >
<select id="findUserById" parameterType="int" resultType="com.njust.ml.po.User">
select * from user where id = ${id}
</select>
</mapper>
在java程序中,就可以不传递给finduserById第二个参数
@Override
public User findUserById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
User user = sqlSession.selectOne("test.findUserById");
sqlSession.close();
return user;
}
这个里面的配置,可以改变Mybatis的运行时行为,一般不需要改动
类型别名,会简化java的完全限定名
<typeAliases>
<typeAlias type="com.njust.ml.po.User" alias="user"/>
</typeAliases>
缺点:如果有很多的类需要有别名,那么配置起来就是一大串,显得很不方便
<typeAliases>
<package name="com.njust.ml.po"/>
</typeAliases>
使用包扫描的时候,指定包名即可,别名为类名(首字母大写或小写均可)
无论是Mybatis在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时,都会使用类型处理器将获取的值以合适的方式转换为java类型
mybatis已经提供了一些转换器,例如:
java类型 JDBC类型
int(Integer) Numeric或者Integer
Long Numeric或者Long Integer
BigDecimal Numeric或者decimal
加载mapper映射器
<mappers>
<mapper resource="mapper/UserMapper.xml"></mapper>
<mapper resource="mapper/usermapper_proxy.xml"></mapper>
</mappers>
<mappers>
<mapper url="file:///C:/mapper/UserMapper.xml"></mapper>
</mappers>
<!--要求userdao这个接口必须与userdao.xml同名并且在一个包路径下-->
<mappers>
<mapper class="com.njust.ml.dao.UserDao"></mapper>
</mappers>
针对第三种方法的改进,类似于typeAliases中的问题,如果mapper接口过多,那么会显得异常繁琐,所以可以采用扫描的方式
<mappers>
<package name="com.njust.ml.dao"/>
</mappers>
与上面的要求是一样的,也要求mapper接口与mapper.xml同名并且在同一个包下