MyBatis主配置文件中的properties元素的propertie子元素的value属性的值,便可以直接定义,也能够在主配置文件中定义而后引用,也能够引用外部的properties文件。举例子来讲就是,以下的两个xml的配置效果是同样的。java
<?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> <environments default="development"> <environment id="development"> <transactionManager type="jdbc"></transactionManager> <dataSource type="pooled"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/eesy"/> <property name="username" value="root"/> <property name="password" value="root"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/dao/UserDao.xml"></mapper> </mappers> </configuration>
<?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> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/eesy"/> <property name="username" value="root"/> <property name="password" value="root"/> </properties> <environments default="development"> <environment id="development"> <transactionManager type="jdbc"></transactionManager> <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> <mapper resource="com/mybatis/dao/UserDao.xml"></mapper> </mappers> </configuration>
以上两种形式,在开发过程当中通常不会这么用。通常是直接类路径下(在maven工程下就是resources目录下)定义一个properties文件,而后在MyBatis的主配置文件中引用该文件,而后就能够在主配置文件中直接引用。以下所示:mysql
jdbc.driver = com.mysql.jdbc.Driver jdbc.url = jdbc:mysql://localhost:3306/mybatis jdbc.username = root jdbc.password = root
<?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="datasource.properties"></properties> <environments default="development"> <environment id="development"> <transactionManager type="jdbc"></transactionManager> <dataSource type="pooled"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/dao/UserDao.xml"></mapper> </mappers> </configuration>
若是属性在不仅一个地方进行了配置,那么 MyBatis 将按照下面的顺序来加载:sql
在MyBatis的映射配置文件中(也就是接口对应的XxxMapper.xml文件),每当指定一个java类的所属类型时,都须要拼写出该类的全限定类名。例以下面的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.mybatis.dao.UserDao"> <!-- 查询全部 --> <select id="findAll" resultType="com.mybatis.domain.User"> SELECT * FROM user </select> <!-- 保存用户 --> <insert id="saveUser" parameterType="com.mybatis.domain.User"> INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert> </mapper>
如上这样配置存在一个问题,当配置文件少的时候还好,若是配置文件的数量一旦增多,就会致使工做量激增。因此就有了给java类的全限定类名取一个简短的别名,用别名代替全限定类名,减小没必要要的工做量。具体操做以下。mybatis
主配置文件中使用typeAliases标签为pojo的全限定类名去一个别名,而后把映射配置文件中pojo的全限定类名替换成别名便可。别名能够任意,且当使用了别名后,别名将不区分大小写。具体配置以下。app
主配置文件dom
<?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> <!-- 注意configuration下的子标签严格区分定义顺序(使用顺序) --> <properties resource="datasource.properties"></properties> <typeAliases> <!-- type:用于指定pojo的全限定类名; alias:用于指定别名 --> <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="jdbc"></transactionManager> <dataSource type="pooled"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/dao/UserDao.xml"></mapper> </mappers> </configuration>
映射文件maven
<?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.mybatis.dao.UserDao"> <!-- 查询全部 --> <!-- 使用了别名后pojo的别名不区分大小写 --> <select id="findAll" resultType="user"> SELECT * FROM user </select> <!-- 保存用户 --> <insert id="saveUser" parameterType="User"> INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert> </mapper>
以上操做虽然已经能极大的简化咱们的开发,可是,一个项目中不可能只有一两个pojo。因此若是咱们要使用上述的方式指定定义一个项目中全部pojo的话也不现实。typeAliases下除了typeAlias子标签外,还有一个package子标签,该标签的做用是为某个指定的包下全部的pojo一块儿取别名,默认类名即为别名。具体以下所示。url
<?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> <!-- 注意configuration下的子标签严格区分定义顺序(使用顺序) --> <properties resource="datasource.properties"></properties> <typeAliases> <!-- type:用于指定pojo的全限定类名; alias:用于指定别名 --> <typeAlias type="com.mybatis.domain.User" alias="user"></typeAlias> <!-- 为com.mybatis.domain子包下的pojo一块儿取别名,别名即为类名 --> <package name="com.mybatis.domain"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="jdbc"></transactionManager> <dataSource type="pooled"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper resource="com/mybatis/dao/UserDao.xml"></mapper> </mappers> </configuration>
<select id="findById" parameterType="java.lang.Integer" resultType="com.mybatis.domain.User"> SELECT * FROM user WHERE id = #{id} </select>
属性说明spa
<insert id="saveUser" useGeneratedKeys="true" keyColumn="id" keyProperty="id" parameterType="com.mybatis.domain.User"> INSERT INTO user(username,birthday,sex,address) values(#{username},#{birthday},#{sex},#{address}) </insert>
属性说明
<update id="updateUser" parameterType="com.mybatis.domain.User"> UPDATE user SET username = #{username}, birthday = #{birthday}, sex = #{sex}, address = #{address} WHERE id = #{id} </update>
属性说明
<delete id="deleteUser" parameterType="java.lang.Integer"> <!-- 当只有一个参数时,参数名称能够任意 --> DELETE FROM user WHERE id = #{id} </delete>