基于XML操作
1.注解和xml加载对比图
2 入门案例
2.1 环境搭建
-
项目:day04_mybatis_xml
-
拷贝内容:
- 拷贝jar包
- 拷贝配置文件:核心配置文件、数据库properties、日志配置
- 拷贝工具类
- 拷贝JavaBean:User
-
空的测试类
package com.czxy.ssm; import com.czxy.ssm.utils.MyBatisUtils; import java.util.List; /** * */ public class Test01_XML_SelectAll { public static void main(String[] args) { //1 获得mapper //2 查询素有 //3 释放 MyBatisUtils.commitAndclose(); } }
2.2 代码实现
- 编写功能接口和方法(注意:没有sql语句)
- 编写Mapper映射文件(也就是写SQL语句)
- 修改核心配置文件(确定mapper映射文件位置)
- 测试
-
编写功能接口和方法(注意:没有sql语句)
package com.czxy.ssm.mapper; import com.czxy.ssm.domain.User; import java.util.List; /** */ public interface UserMapper { /** * 查询所有 * @return */ public List<User> selectAll(); }
-
编写Mapper映射文件(也就是写SQL语句)
<?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.ssm.mapper.UserMapper">
<!-- 编写查询语句 -->
<select id="selectAll" resultType="com.czxy.ssm.domain.User">
select * from user
</select>
</mapper>
-
修改核心配置文件(确定mapper映射文件位置)
<mappers> <!-- 确定映射文件位置 --> <mapper resource="mapper/UserMapper.xml"/> </mappers>
-
测试
package com.czxy.ssm; import com.czxy.ssm.domain.User; import com.czxy.ssm.mapper.UserMapper; import com.czxy.ssm.utils.MyBatisUtils; import java.util.List; /** */ public class Test01_XML_SelectAll { public static void main(String[] args) { //1 获得mapper UserMapper userMapper = MyBatisUtils.getMapper(UserMapper.class); //2 查询素有 List<User> list = userMapper.selectAll(); list.forEach(System.out::println); //3 释放 MyBatisUtils.commitAndclose(); } }
3 增删改
3.1 注解和xml对比
注解 | XML标签 |
---|---|
@Select(“SQL语句”) | <select>SQL语句</select> |
@Insert(“SQL语句”) | <insert>SQL语句</insert> |
@Update(“SQL语句”) | <update>SQL语句</update> |
@Delete(“SQL语句”) | <delete>SQL语句</delete> |
3.2 添加
-
编写功能接口
/** * 添加 * @param user * @return */ public Integer insertUser(User user);
-
编写xml
<!-- 添加 --> <insert id="insertUser" parameterType="com.czxy.ssm.domain.User"> INSERT INTO `user`(uid,user_name,`password`) VALUES(#{uid},#{userName},#{password}) </insert>
-
测试
@Test public void testInsert() { //1 获得mapper UserMapper userMapper = MyBatisUtils.getMapper(UserMapper.class); //2 添加 User user = new User(); user.setUid("x002"); user.setUserName("xxxx"); user.setPassword("溜溜"); Integer result = userMapper.insertUser(user); System.out.println(result); //3 释放 MyBatisUtils.commitAndclose(); }
3.3 修改
-
修改功能接口,添加修改方法
/** * 更新 * @param user * @return */ public Integer updateUser(User user);
-
修改xml,为方法编写sql语句
<!-- 修改 --> <update id="updateUser"> update `user` set user_name=#{userName}, password=#{password} where uid=#{uid} </update>
-
测试类
@Test public void testUpdate() { //1 获得mapper UserMapper userMapper = MyBatisUtils.getMapper(UserMapper.class); //2 添加 User user = new User(); user.setUid("x002"); user.setUserName("yyyyy"); user.setPassword("遛遛"); Integer result = userMapper.updateUser(user); System.out.println(result); //3 释放 MyBatisUtils.commitAndclose(); }
5.3.4 添加
-
编写功能接口
/** * 添加 * @param user * @return */ public Integer DelUser(@Param("uid") String uid);
-
编写xml
<!-- 添加 --> <insert id="insertUser" parameterType="com.czxy.ssm.domain.User"> delete from user uid = #{uid} </insert>
-
测试
@Test public void testDel() { //1 获得mapper UserMapper userMapper = MyBatisUtils.getMapper(UserMapper.class); //2 删除 Integer result = userMapper.DelUser("x001"); System.out.println(result); //3 释放 MyBatisUtils.commitAndclose(); }
-
5.4 API详解:映射文件
4.1 参数类型:parameterType
-
案例1:查询详情
-
接口,需要使用
@Param
设置别名/** * 通过id查询详情 * @param id * @return */ public User selectById(@Param("uid") String id);
-
xml
<select id="selectById" parameterType="string" resultType="com.czxy.ssm.domain.User"> select * from user where uid =#{uid} </select>
-
-
案例2:用户名、密码查询
-
接口
/** * 通过用户名和密码查询 * @param username * @param password * @return */ public User selectByUsernameAndPassword(@Param("username") String username,@Param("password") String password);
-
xml
<select id="selectByUsernameAndPassword" resultType="com.czxy.ssm.domain.User"> select * from user where user_name = #{username} and password = #{password} </select>
-
4.2 结果集类型:resultType
-
案例:总条数
-
接口
/** * 总条数 * @return */ public Long countUser();
-
xml
<select id="countUser" resultType="long"> select count(*) from user </select>
-
4.3 映射关系(自定义映射):resultMap
-
在注解版学习过程,使用
@Results
可以配置自定义映射 -
在XML版中,使用 resultMap 完成相同的工作。
-
使用
<!--声明--> <resultMap id="名称"> <id/> <!--主键映射--> <result/> <!--普通列映射--> </resultMap> <!--使用--> <select resultMap="名称"></select>
-
实例:修改查询所有
<!-- 查询所有版本2:resultMap --> <resultMap id="userResultMap" type="com.czxy.ssm.domain.User"> <id property="uid" column="uid"></id> <result property="userName" column="user_name"></result> </resultMap> <select id="selectAll" resultMap="userResultMap"> select * from user </select>
4.4 自定义别名
-
定义别名:在核心配置中,定义别名。
-
使用别名:在映射文件中,使用别名。
-
定义别名
-
给一个类定义别名
<typeAlias type="com.czxy.ssm.domain.User" alias="user"></typeAlias>
-
给包下面的所有类,定义别名(规则:首字母小写驼峰)
<package name="com.czxy.ssm.domain"/>
-
-
使用
<resultMap id="" type="user">