SqlSessionFactory的创建
String resource = "org/mybatis/example/SqlMapConfig.xml";
Reader reader = Resources.getResourceAsReader(resource);
SqlSessionFactory sqlMapper = new SqlSessionFactoryBuilder().build(reader);
Mybatis的配置:
SqlMapConfig.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<typeAliases>
<typeAliastype="cn.itcast.mybatis.domain.User" alias="User"/>
<typeAliastype="cn.itcast.mybatis.domain.Person" alias="Person"/>
<typeAliastype="cn.itcast.mybatis.domain.Order" alias="Order"/>
</typeAliases>
<environmentsdefault="development">
<environmentid="development">
<transactionManagertype="JDBC" />
<dataSourcetype="POOLED">
<propertyname="driver" value="com.mysql.jdbc.Driver" />
<propertyname="url" value="jdbc:mysql://localhost/mybatis" />
<propertyname="username" value="root" />
<propertyname="password" value="root" />
</dataSource>
</environment>
</environments>
<mappers>
<!--映射文件的位置 -->
<mapperresource="cn/itcast/mybatis/domain/User.xml" />
<mapperresource="cn/itcast/mybatis/domain/Person.xml" />
<mapperresource="cn/itcast/mybatis/domain/Order.xml" />
</mappers>
</configuration>
User.xml
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.itcast.mybatis.domain.User">
<resultMaptype="User" id="userMap">
<idcolumn="id" property="id"/>
<resultcolumn="name" property="userName"/>
<resultcolumn="address" property="address"/>
</resultMap>
<sqlid="mysql">
id,name,address
</sql>
<!--根据id查询User -->
<!--id:当前sql语句的唯一标示 parameterType:参数类型resultType:结果类型(返回值类型)-->
<selectid="selectUserById" parameterType="string"resultMap="userMap">
select<include refid="mysql"/> from user where id = #{userid}
</select>
<!--查询所有User -->
<selectid="selectAllUsers" resultType="User">
selectid,name as userName ,address from user
</select>
<!--根据id查询User,返回值为:Map -->
<selectid="selectUserByIdForMap" parameterType="string"resultType="hashmap">
selectid,name,address from user where id = #{userid}
</select>
<!--动态sql -->
<selectid="selectUserByCondition" parameterType="User"resultType="User">
selectid,name as userName ,address from user where 1=1
<iftest="id != null">
andid = #{id}
</if>
<!--userName指的是实体的属性 -->
<iftest="userName != null">
andname = #{userName}
</if>
<iftest="address != null">
andaddress = #{address}
</if>
</select>
<!--动态sql -->
<selectid="selectUserByCondition2" parameterType="User"resultType="User">
selectid,name as userName ,address from user
<where>
<iftest="id != null">
id = #{id}
</if>
<!--userName指的是实体的属性 -->
<iftest="userName != null">
andname = #{userName}
</if>
<iftest="address != null">
andaddress = #{address}
</if>
</where>
</select>
<!--插入User -->
<insertid="insertUser" parameterType="User">
insertinto user (id,name,address) values (#{id},#{userName},#{address});
</insert>
<!--插入User 参数为hashmap-->
<insertid="insertUserForMap" parameterType="hashmap">
insertinto user (id,name,address) values (#{id},#{name},#{address});
</insert>
<!--根据id删除User -->
<deleteid="deleteUserById" parameterType="string">
deletefrom user where id = #{id}
</delete>
<!--根据id更新User -->
<updateid="updateUserById" parameterType="User">
updateuser set name = #{userName},address = #{address} where id = #{id}
</update>
<!--根据id更新User 参数为map-->
<updateid="updateUserByIdForMap" parameterType="hashmap">
updateuser set name = #{userName},address = #{address} where id = #{id}
</update>
</mapper>
mybatis一对多映射:
Person.xml(Person和Order的一对多映射)
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="cn.itcast.mybatis.domain.Person">
<resultMaptype="Person" id="personMap">
<idcolumn="personId" property="id"/>
<resultcolumn="personName" property="name"/>
<resultcolumn="personAddress" property="address"/>
<resultcolumn="personTel" property="tel"/>
<!--一对多 -->
<!--property:指的是集合属性的值 ofType:集合中元素的类型-->
<collectionproperty="orders" ofType="Order">
<idcolumn="orderId" property="id"/>
<resultcolumn="orderNumber" property="number"/>
<resultcolumn="orderPrice" property="price"/>
</collection>
</resultMap>
<selectid="selectPersonById" parameterType="string"resultMap="personMap">
selectp.*,o.* from person p,orders o where p.personId = o.pid and p.personId = #{id}
</select>
</mapper>
Mybatis多对一关联映射:
<?xml version="1.0"encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mappernamespace="cn.itcast.mybatis.domain.Order">
<resultMaptype="Order" id="orderMap">
<idcolumn="orderId" property="id"/>
<resultcolumn="orderNumber" property="number"/>
<resultcolumn="orderPrice" property="price"/>
<!--多对一的关系 -->
<associationproperty="p" javaType="Person">
<idcolumn="personId" property="id"/>
<resultcolumn="personName" property="name"/>
<resultcolumn="personAddress" property="address"/>
<resultcolumn="personTel" property="tel"/>
</association>
</resultMap>
<!--根据id查询Order,关联将Person查询出来 -->
<selectid="selectOrderById" parameterType="string"resultMap="orderMap">
selectp.*,o.* from person p,orders o where p.personId = o.pid and o.orderId = #{id}
</select>
</mapper>
Include Sql语句
1,定义 sql语句模板:
<sql id="mysql">
id,name,address
</sql>
2,引用sql模板:
<!-- 根据id查询User -->
<!-- id:当前sql语句的唯一标示 parameterType:参数类型 resultType:结果类型(返回值类型)-->
<select id="selectUserById"parameterType="string" resultMap="userMap">
select<include refid="mysql"/> from user where id = #{userid}
</select>
实体属性与数据库字段不一致时的解决方案:
1,使用as:select id, nameas username, address from user;(用的不是很多)
2,使用resultMap
<resultMap type="User"id="userMap">
<idcolumn="id" property="id"/>
<resultcolumn="name" property="userName"/>
<resultcolumn="address" property="address"/>
</resultMap>
<!-- 根据id查询User -->
<!-- id:当前sql语句的唯一标示 parameterType:参数类型 resultType:结果类型(返回值类型)-->
<select id="selectUserById"parameterType="string" resultMap="userMap">
select<include refid="mysql"/> from user where id = #{userid}
</select>