Mybatis编程语言全内容分解
树图思维导图提供 Mybatis编程语言脑图 在线思维导图免费制作,点击“编辑”按钮,可对 Mybatis编程语言脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:f31465b114b065c7efb8eb6b68caa531
Mybatis-02思维导图模板大纲
增加
UserMapper.java接口
UserMapper.xml映射文件
MybatisTest测试
//5:调用对应的方法,完成查新数据库操作 User user =new User(3,"HanRunDong","123456"); mapper.insertUser(user);
删除
UserMapper.java接口
UserMapper.xml映射文件
MybatisTest测试
mapper.deleteUserById(3);
查询
UserMapper.java接口
UserMapper.xml映射文件
MybatisTest测试
User user= mapper.queryUserById(1); System.out.println(user);
修改
UserMapper.java接口
UserMapper.xml映射文件
MybatisTest测试
User user=new User(); user.setId(2); user.setPassword("567"); mapper.updateUserPasswordById(user);
2.1简单类型参数
1.接口中方法参数类型为,基本数据类型,int,或string public void deleteUserById(Integer id);
2.接口xml配置文件, <delete id="deleteUserById" parameterType="integer"> delete from user where id={id} </delete>
2.2引用参数类型
1.接口中参数为自定义的引用对象,
2.xml配置文件中
<insert id="insertUserGetId" parameterType="user" userGeneratedKeys="true" keyColumn="id" keyProperty="id"> insert into user(user_name,password) values(#{userName},#{password}) </insert>
2.3. 多参数传递
方式一: 如果传递的参数有多个,Mybatis默认会按照传递参数的顺序命名为arg0,arg1,....., 在映射文件中可以直接使用arg0,arg1....获取传递的参数
UserMapper.java接口中 public User queryUserByIdAndUserName(int id,String userName);
UserMapper.xml配置文件中 <select id="queryUserByIdAndUseerName" reusltType="user"> select * from user where id=#{arg0} and user_name=#{arg1} </select>
方式二: 如果传递的参数有多个,mybatis默认会按照传递的参数顺序命名为param1,param2...., 在映射文件中可以直接使用param1,param2,....获取传递的参数。
UserMapper.java接口中 public User queryUserByIdAndUserName(int id,String userName);
UserMapper.xml配置文件中 <select id="queryUserByIdAndUserName resultType="user"> select * from user where id=#{param1} and use_name=#{param2} </select>
方式三: 如果传递的参数有多个或接口方法中的参数名称和映射文件中使用的参数名称不一致, 可以使用@param()指定接口方法参数在映射文件中使用的名称。
UserMapper.java接口中 //@param:给mapper接口方法的参数设置一个在mapper.xml文件中使用的名称。 public User queryUserByIdAndUserName(@Param("id") int id, @param("userName") String userName);
UserMapper.xml配置文件中 <select id="queryUserByIdAndUserName" resultType="user"> select * from user where id=#{id} and user_name=#{userName} </select>
MybatisTest.java单元测试类
User user = mapper.queryUserByIdAndUserName(10, "赵云"); System.out.println(user);
2.4. #{}与${}的区别
共同点: 他俩都可以获取接口调用中传递过来的参数
区别:
#{ }(建议使用)
1.表示占位符 ?
2.如果参数只有一个基本类型,#{名称}中的名称可以随便写
3.如果参数是实体类对象类型,#{名称}必须与实体类对象中的属性名一致!!!
4.可以防止sql语句注入
${ }
1.直接拼接sql,'${username}'
2.如果参数只有一个基本类型那么只能写为 ${value}
3如果参数是实体类对象类型,${名称}必须与实体类对象中的属性名一致
4.不可以防止sql注入,比如:内容为' or '1'='1
ResultType方式
ResultType方式适用于数据库结果集合可以直接映射成一个Java类的情况
使用方法: 在xml文件中: <select id ="queryAllUseer" resultType="user> select * from user; </select>
ResultMap方式
3.2.1解决数据库列明与Java类中属性名不一致的映射问题
ResultMap方式适用于复杂的结果集映射, 比如数据库返回的结果集 中的列名和JavaBean无法 一 一 对应,或者对象间存在一对一,一对多的多关联映射时。
User_ResultMap.java实体类
UserResultMapper.java接口 public interface userResultMapMapper{ public List<User_ResultMap> queryAllUser(); }
UserResultMapMapper.xml配置文件 <mapper namespace="com.lanou.mybatis.mapper.UserResultMapMapper"> <select id="queryAllUser resultType="User_ResultMap"> select * from user; </select> </mapper>
单元测试: List<User_ResultMap> user_resultMaps=mapper.queryAllUser(); System.out.println(user_resultMaps);
因此需要在UserResultMapMapper.xml配置文件中写入: 需要使用ResultMap进行手动映射处理 id : resultmap的唯一标识 type : resultmap的类型,及数据库查询数据封装到哪个实体类对象中 主键关系映射对应 column:数据库查询出来的主键字段的名称 property:实体类中和数据库查询出来的主键对应的属性的名称 <resultMap id="userResultMap" type="user_ResultMap"> <id column="id" property="id" ></id> <result column="user_name" property="un"></result> <result column="password" property="pw"></result> </resultMap>
可查询到结果
3.2.2如果遇到单纯字段名和属性名不对应的情况,使用别名的方式更简单
<!--明知道数据库表查询字段和实体类属性名称不对应,但是就是使用resulttype去封装处 理数据,怎么保证数据全部查询封装起来-->
<select id="queryAll" resultType="user_ResultMap"> select id,user_name un,password pw from user </select>
4.1概述
PageHelper非Mybatis官方提供,时开源社区的开发者自己编写的一个用于完成分页查询的Mybatis插件,开源在Github中。
4.2使用方法
1.添加依赖,首先在模块pom.xml文件中配置: <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>5.2.0</version> </dependency>
4.3获取分页参数
4.4分页插件配置项(可选)