MyBatis--Xml 基本使用

1.目录结构

在这里插入图片描述

2.导入依赖

<properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.9.RELEASE</version>
        <relativePath/>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.45</version>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.1</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.22</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

3.配置文件 yaml

server:
  port: 18082
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf8
    username: root
    password: 123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: xml-service
# mapper的接口和对应的配置文件
mybatis:
  mapper-locations: classpath:mapper/*.xml

4.配置 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>
    
</mapper>

5.基本使用

5.1 查询详情

Mapper:

@Mapper
public interface UserMapper {
    /**
     * 根据ID查询用户
     * @param id
     * @return
     */
    User queryUserById(Long id);
}

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">
<!-- 这个文件,用来定义要用到的SQL信息
约定:
1)每个DAO接口对应一个Mapper.xml文件
2)mapper.xml的namespace必须是接口的全名称
3)mapper.xml中的每个statement的id必须是接口中对应的方法名
4)statement中定义的resultType必须和接口中对应方法的返回值一致

namespace:名称空间,当前xml配置文件与哪个类配对 -->
<mapper namespace="com.czxy.dao.UserMapper">
    <!-- 这里定义一条SQL语句,其实就是一个statement
            select:代表是一条查询的SQL,我们还可以定义:update\insert\delete
                id: 这个statement的唯一标示,与方法名保持一致,不能重复
                parameterType:SQL参数类型,这里要写类的全名,可以省略,mybatis可以自动识别
                resultType:返回结果类型,这里写类的全名
                resultMap:结果集映射,这个和resultType 只能存在1个,应对复杂的结果集。后面详细讲!
         -->
    <select id="queryUserById" parameterType="java.lang.Long" resultType="com.czxy.domain.User">
        <!-- 这里定义真正的SQL语句,#{} 代表占位符,当SQL被编译时,会变成?,然后接收真正的参数 -->
        SELECT *FROM tb_user WHERE id = #{id}
    </select>

   
</mapper>

5.2 查询所有
Mapper:

@Mapper
public interface UserMapper {
    /**
     * 查询全部用户
     * @return
     */
    List<User> queryAll();
   
}

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.czxy.dao.UserMapper">
    

    <!-- 查询全部用户:
        resultType:返回的结果虽然是一个List,这里依然写List中的元素类型,Mybatis会自动判断返回值个数并且做封装
     -->
    <select id="queryAll" resultType="com.czxy.domain.User">
		SELECT *FROM tb_user
	</select>

</mapper>

5.3 添加数据

@Mapper
public interface UserMapper {
    /**
     * 添加用户
     * @param user
     */
    void insertUser(User user);
}

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.czxy.dao.UserMapper">
   

    <!-- 添加用户信息:
         开启id回填:
         useGeneratedKeys:自增主键的回填功能
         keyProperty:主键对应的java对象字段名
         keyColumn:主键在数据库中的列名
    -->
    <insert id="insertUser" parameterType="com.czxy.domain.User"
        useGeneratedKeys="true" keyProperty="id" keyColumn="id"
    >
        <!-- 注意,这里用#{字段名},mybatis会自动根据字段名,去User参数中找字段值,设置到Sql中 -->
        INSERT INTO tb_user (
        id,
        user_name,
        password,
        name
        )
        VALUES
        (
        NULL,
        #{userName},
        #{password},
        #{name}
        );
    </insert>
 
</mapper>

5.4 修改数据

Mapper:

@Mapper
public interface UserMapper {
    /**
     * 修改用户
     * @param user
     */
    void updateUser(User user);
  
}

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.czxy.dao.UserMapper">
<!-- 修改用户 -->
    <update id="updateUser" parameterType="com.czxy.domain.User">
		UPDATE tb_user
		SET
			user_name = #{userName},
			password = #{password},
			name = #{name},
			age = #{age},
			sex = #{sex},
			birthday = #{birthday},
			updated = NOW()
		WHERE
			id = #{id};
	</update>
</mapper>

5.5 删除数据

Mapper:

@Mapper
public interface UserMapper {
 /**
     * 根据ID删除用户
     * @param id
     */
    void deleteUserById(Long id);
}

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.czxy.dao.UserMapper">
 <!-- 删除用户 -->
    <delete id="deleteUserById" parameterType="java.lang.Long">
		DELETE FROM tb_user WHERE id = #{id}
	</delete>
</mapper>

6.高级使用

6.1 多个参数

如果是多个参数,需要@Param注解来给不同的参数命名,命名后可以在Xml中的${}中直接调用。
Mapper:

@Mapper
public interface UserMapper {
	/**
		模拟用户登录
	*/
    List<User> login(@Param("userName") String userName,
                     @Param("password") String password);
}

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.czxy.dao.UserMapper">
<!--    多个参数查询-->
    <select id="login" parameterType="java.lang.String" resultType="com.czxy.domain.User">
        select * from tb_user where user_name = '${userName}' and password = '${password}'
    </select>
</mapper>

6.2 ResultMap结果集映射

Resultmap解决了列名和字段不一样的问题

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.czxy.mapper.StudentMapper">
   
<!--    
	配置每一个属性和列名的对应关系,解决名称不一致的问题
-->
    <resultMap id="two2" type="com.czxy.domain.Sc">
    	<id column="id" property="id"></id>
        <result column="sstudent_id" property="sid"></result>
        <result column="sc_id" property="cid"></result>
    </resultMap>
<!-- 
    这里不使用resultType 使用resultMap 两者只能存在一个,通过resultMap 的id指定resultMap 
-->
    <select id="two" resultMap="two2">
        select * from sc 
    </select>
</mapper>

6.3 SQL片段

我们经常会把SQL中比较通用的部分,提前出来,变成一个SQL片段,然后在各个SQL中都可以调用,简化书写;

例如,查询语句中,一般不会使用:Select * ,而是把列名一一列出,但是表的列名往往比较多,这时就可以提取出来;
Xml:

<!-- 
	SQL片段
-->
	<sql id="userColumns">
        id,user_name,password,name,age,sex,birthday,note,created,updated
    </sql>
<!-- 
	下面使用SQL片段
-->
	<select id="findById" parameterType="java.lang.Long" resultMap="userResultMap">
        select <include refid="userColumns"></include> from tb_user where id = #{id}
    </select>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值