mybatis-config.xml 配置文件
<configuration>
<!-- properties使用 -->
<properties resource="db.properties">
<property name="db.username" value="root"/>
<property name="db.password" value="123"/>
</properties>
<!-- 设置参数 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 别名 -->
<typeAliases>
<package name="cn.com.pojo"/>
</typeAliases>
<!-- 环境变量 -->
<environments default="dev">
<!-- 开发环境 -->
<environment id="dev">
<!-- 事务管理 JDBC使用JDBC完成事务的提交和回滚 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 数据源配置 POOLED开启连接池,mybatis自带的dbcp连接池 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/books"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
/* db.properties文件
db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/books*/
/* 和<properties>、db.properties文件配合使用
<property name="driver" value="${db.driver}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
*/
</dataSource>
</environment>
</environments>
<!-- 映射文件 单个映射 -->
<mappers>
<mapper resource="cn/com/mapper/UsersMapper.xml"/>
</mappers>
</configuration>
目录映射,如果要起效,那么类文件要映射文件放到同一目录下
创建与mapper文件同名的接口
接口要与mapper文件放到同包下
mapper 接口的权限类名称要与mapper映射文件的namespace一致
-
mapper 接口的方法名称,参数类型parameterType,返回值类型resultType 要与mapper映射文件中一致,如果返回值使用自定义resultMap泽数据类型为自定义resultMap中的type
<mappers> <package name="cn/com/mapper" /> </mappers>
mapper.xml映射文件
<mapper namespace="cn.com.pojo.Users">
<!-- parameterType 添加操作传入的参数类型 -->
<!-- user.name="张三" user.sex="男" user.age="20" -->
<!-- #{name}是查找的参数user.name属性的值 也是就 "张三" -->
<insert id="save" parameterType="Users">
<![CDATA[
insert into users (name,sex,age) values(#{name},#{sex},#{age});
]]>
</insert>
<update id="update" parameterType="Users">
<![CDATA[
update users set name=#{name},sex=#{sex},age=#{age} where id=#{id};
]]>
</update>
<delete id="delete" parameterType="int">
<![CDATA[
delete from users where id=#{id};
]]>
</delete>
<select id="findbyid" parameterType="int" resultType="Users">
<![CDATA[
select * from users where id=#{id};
]]>
</select>
<select id="findall" resultType="Users">
<![CDATA[
select * from users;
]]>
</select>
</mapper>
一对多关联
<mapper namespace="cn.com.pojo.Dept">
<!-- resultMap 做返回结构映射的
type 说明要映射那个类型
id 标识,为后面的返回结果引用
-->
<resultMap type="Dept" id="deptResultMap">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
</resultMap>
<!-- 一对多关联 -->
<resultMap type="Dept" id="deptResultMap2">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
<!-- 一对多关联 collection
javaType 返回的类型 这是我们返回List<Emp> emps; list
ofType 是容器内包含的数据类型 Emp
-->
<collection property="emps" javaType="List" ofType="Emp">
<id column="empid" property="empid"/>
<result column="empname" property="empname"/>
</collection>
</resultMap>
<!-- resultMap 引用制定di的结果映射 -->
<select id="findall" resultMap="deptResultMap">
<![CDATA[
select * from dept;
]]>
</select>
<!-- 一对多关联查询 -->
<select id="findDeptWithEmpsbyid" resultMap="deptResultMap2" parameterType="int">
<![CDATA[
select d.*,e.empid,e.empname from emp e,dept d where e.did=d.dept_id and d.dept_id=#{id};
]]>
</select>
</mapper>
多对一关联
<mapper namespace="cn.com.pojo.Emp">
<!-- resultMap 做返回结构映射的
type 说明要映射那个类型
id 标识,为后面的返回结果引用
-->
<!-- resultMap 引用制定di的结果映射 -->
<resultMap type="Emp" id="empResultMap">
<id column="empid" property="empid"/>
<result column="empname" property="empname"/>
<result column="empage" property="empage"/>
<!-- 表达多对一关联 -->
<association property="dept" javaType="Dept">
<id column="dept_id" property="deptId"/>
<result column="dept_name" property="deptName"/>
</association>
</resultMap>
<select id="insert" parameterType="Emp">
<![CDATA[
insert into emp(empname,empage,did) values(#{empname},#{empage},#{dept.deptId});
]]>
</select>
<update id="update" parameterType="Emp">
<![CDATA[
update emp set did=#{dept.deptId} where empid=#{empid}
]]>
</update>
<select id="findall" resultMap="empResultMap">
<![CDATA[
select * from emp e,dept d where e.did = d.dept_id;
]]>
</select>
</mapper>
多对多关联
<mapper namespace="cn.com.pojo.Studenttbl">
<!-- resultMap 做返回结构映射的
type 说明要映射那个类型
id 标识,为后面的返回结果引用
-->
<resultMap type="Studenttbl" id="stuResultMap">
<id column="sid" property="sid"/>
<result column="sname" property="sname"/>
<collection property="coursetbls" javaType="List" ofType="Coursetbl">
<id column="cid" property="cid"/>
<result column="cname" property="cname"></result>
</collection>
</resultMap>
<!-- 多对多关联查询 -->
<select id="findbyid" resultMap="stuResultMap" parameterType="int">
<![CDATA[
select s.*,c.* from studenttbl s,coursetbl c,stuCouTbl sc where s.sid=sc.sid and c.cid=sc.cid and s.sid=#{id};
]]>
</select>
</mapper>
动态sql
-
动态sql查询
<select id="findbyWhere" parameterType="map" resultMap="stuResultMap"> select * from studenttbl s <where> <if test="sid!=null and sid!=''"> s.sid>#{sid} </if> <if test="sname!=null and sname!=''"> and s.sname=#{sname} </if> </where> </select>
-
动态sql choose查询
<select id="findbyCondition"> select * from emp where 1=1 <choose> <when test="empid!=null and empid>0"> and empid=#{empid} </when> <when test="empname!=null"> and empname=#{empname} </when> <otherwise></otherwise> </choose> </select>
-
动态更新,set子句
<update id="updatebyset" parameterType="Emp"> <!-- update emp set empname=#{empname},empage=#{empage},did=#{dept.deptId} where empid=#{empid} --> update emp <set> <if test="empname!=null">empname=#{empname},</if> <if test="empage>0">empage=#{empage},</if> <!-- 关联使用,先判断关联独享本身非空,在判断关联对象的属性非空或(原始类型)>0 --> <if test="dept!=null and dept.deptId>0">did=#{dept.deptId}</if> </set> where empid=#{empid} </update>
-
foreach 动态sql
<select id="findbyin" parameterType="List" resultMap="empResultMap"> select * from emp where empid in <foreach collection="list" item="it" open="(" close=")" separator=","> #{it} </foreach> </select>
-
like模糊查询
<select id="findbylike" parameterType="Emp" resultMap="empResultMap"> select * from emp where empname like '%${empname}%'; </select>
-
bind模糊查询
<select id="findbybind" parameterType="string" resultMap="empResultMap"> <!-- _parameter是固定的 表示传入的参数对象 _parameter.getEmpname() 表示调用传入对象的方法 --> <bind name="pattern" value="'%'+_parameter+'%'"/> select * from emp where empname like #{pattern}; </select>