ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
## 配置驱动区局配置 ![](https://img.kancloud.cn/6a/be/6abe2cc6b2c485912bc45dd6d7b7ba56_769x90.png) ~~~ <?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" /> <!-- 配置mybatis的环境信息 --> <environments default="development"> <environment id="development"> <!-- 配置JDBC事务控制,由mybatis进行管理 --> <transactionManager type="JDBC"></transactionManager> <!-- 配置数据源,采用dbcp连接池 --> <dataSource type="POOLED"> <property name="driver" value="${driverClass}"/> <property name="url" value="${url}"/> <property name="username" value="${username}"/> <property name="password" value="${password}"/> </dataSource> </environment> </environments> <mappers> <!-- <mapper resource="com/gyf/sqlmap/User.xml"></mapper>--> <mapper resource="com/gyf/mapper/UserMapper.xml"></mapper> </mappers> </configuration> ~~~ ## 获取sql句柄 ~~~ package com.gyf.test; import com.gyf.model.User; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.List; public class Demo1 { SqlSession sqlSession; @Before public void before() throws IOException { //读取配置文件 InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml"); //通过sqlsessionFactory创建sqlsessionfactory SqlSessionFactory sqlSessionFactory= new SqlSessionFactoryBuilder().build(is); sqlSession=sqlSessionFactory.openSession(); // } @After public void after(){ //关闭sqlsession sqlSession.close(); } @Test public void test1() throws IOException { User user= sqlSession.selectOne("findUserById",10); List<User> users= sqlSession.selectList("findUserByName","张"); System.out.println(users); } //插入 @Test public void test2(){ User user=new User("哈哈12","2",new Date(),"郑州"); sqlSession.insert("insertUser",user); sqlSession.commit(); } //删除通过id @Test public void test3(){ sqlSession.delete("deleteById",29); sqlSession.commit(); } //通过对象 @Test public void test4(){ User user =new User(28); sqlSession.delete("deleteByUser",28); sqlSession.commit(); } //通过对象 @Test public void test5(){ User user=new User("哈哈12","2",new Date(),"郑州s"); user.setId(27); sqlSession.update("updateAddress",user); sqlSession.commit(); } //插入 @Test public void test6(){ User user=new User("哈哈12","2",new Date(),"郑州"); int row=sqlSession.insert("insertUserId",user); sqlSession.commit(); System.out.println(row); System.out.println(user.getId()); } } ~~~ ## 编写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="user"> <!--根据id查询--> <select id="findUserById" parameterType="int" resultType="com.gyf.model.User"> SELECT * FROM user WHERE id = #{id} </select> <select id="findUserByName" parameterType="String" resultType="com.gyf.model.User"> SELECT * FROM user WHERE username LIKE '%${value}%' </select> <insert id="insertUser" parameterType="com.gyf.model.User"> INSERT INTO user (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address}); </insert> <delete id="deleteById" parameterType="int"> DELETE FROM user where id = #{id} </delete> <delete id="deleteByUser" parameterType="com.gyf.model.User"> DELETE from user where id =#{id} </delete> <!--更新地址--> <update id="updateAddress" parameterType="com.gyf.model.User"> UPDATE user SET address = #{address} where id = #{id} </update> <insert id="insertUserId" parameterType="com.gyf.model.User"> <selectKey resultType="int" keyProperty="id" order="AFTER"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO user (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address}); </insert> </mapper> ~~~ ### 第二种写法使用namespace ~~~ <?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.gyf.mapper.UserMapper"> <insert id="save" parameterType="com.gyf.model.User"> INSERT INTO user (username,sex,birthday,address) value (#{username},#{sex},#{birthday},#{address}); </insert> <select id="getUserById" parameterType="int" resultType="com.gyf.model.User"> SELECT * FROM user WHERE id = #{id} </select> </mapper> ~~~ ## 配置扫描取别名 ~~~ <typeAliases> <!-- <typeAlias type="com.gyf.model.User" alias="user" />--> <package name="com.gyf.model"/> <package name="com.gyf.vo"/> </typeAliases> ~~~ ![](https://img.kancloud.cn/d6/6a/d66a0bd8162c221b0fa03a5ab4c72261_441x163.png) ## 输出映射 ### **resultType** 使用resultType进行结果映射时,查询的列名和映射的pojo属性名完全一致,该列才能映射成功。 如果查询的列名和映射的pojo属性名全部不一致,则不会创建pojo对象; 如果查询的列名和映射的pojo属性名有一个一致,就会创建pojo对象。 ### **resultMap** 如果查询出来的列名和属性名不一致,通过定义一个**resultMap将列名和pojo属性名**之间作一个映射关系。 1、定义resultMap 2、使用resultMap作为statement的输出映射类型 ~~~ <!--返回结果集--> <resultMap id="userResultMap" type="user"> <id property="id" column="id_"></id> <id property="username" column="username_"></id> </resultMap> <select id="findUserByIdResultMap" resultMap="userResultMap" parameterType="int"> SELECT id ,username username_ FROM user where id =#{id} </select> ~~~ ## **if 和where使用** ![](https://img.kancloud.cn/8f/38/8f380e2a922d072cd7af45af1f395219_561x47.png) ~~~ <select id="findUserList" resultType="user" parameterType="UserQueryVo"> SELECT * FROM user u <where> <if test="user != null"> <if test="user.sex != null and user.sex !=''"> u.sex =#{user.sex} </if> <if test="user.username != null and user.username !=''"> AND u.username LIKE '%${user.username}%' </if> </if> </where> </select> ~~~ ![](https://img.kancloud.cn/b8/49/b849bb8438c565cf41b2feb7467585be_749x243.png) ![](https://img.kancloud.cn/35/d8/35d8fcb9204b5d73b68c3d31271579a4_1317x144.png) ## sql标签片段 ~~~ <sql id="find_user"> <if test="user != null"> <if test="user.sex != null and user.sex !=''"> u.sex =#{user.sex} </if> <if test="user.username != null and user.username !=''"> AND u.username LIKE '%${user.username}%' </if> <if test="user.address != null and user.address !=''"> AND u.address LIKE '%${user.address}%' </if> </if> </sql> <select id="findUserList" resultType="user" parameterType="UserQueryVo"> SELECT * FROM user u <where> <include refid="find_user"/> </where> </select> ~~~ ![](https://img.kancloud.cn/10/7f/107fe1f726d936f417f9d3e1ebbc204e_506x418.png) ## foreach 1. collection 集合 2. item 赋值元素 3. open 开始拼接字段 4. open 结束拼接字段 5. separator 分割字符 ~~~ <select id="findUserByIds" resultType="user" parameterType="UserQueryVo"> SELECT * FROM user <where> <if test="ids !=null and ids.size>0"> <foreach collection="ids" item="id" open="id in (" close=")" separator=","> ${id} </foreach> </if> </where> </select> ~~~ ![](https://img.kancloud.cn/c5/c5/c5c5923ae261fe49432d8bf7eacc675f_731x70.png) ![](https://img.kancloud.cn/44/a7/44a7339d7e2e931862f24274d6a4b6b7_309x40.png) ## 配置懒加载 ~~~ <settings> <!--懒加载--> <setting name="lazyLoadingEnable" value="true"/> </settings> ~~~ ![](https://img.kancloud.cn/b3/da/b3da1d171c66c51b78f5fea120f2a2c7_783x171.png)