MyBatis--2

CRUD操作及配置解析

  • crud是指在做计算处理时的增加(Create)、检索(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。

select

	select语句有很多属性
  • id
    接口中的方法名与映射文件中的sql语句id对应

  • parameterType
    传入sql语句的类型 (没有参数可以省略)

  • resultType
    sql语句返回值的类型 (返回为int 可以省略)

根据id查询用户

1.在UserMapper中添加方法

在这里插入代码片
public interface UserMapper {
   //查询全部用户
   List<User> selectUser();
   //根据id查询用户
   User selectUserById(int id);
}

2.在UserMapper.xml中添加Select语句

在这里插入代码片
<select id="selectUserById" resultType="com.zgx.pojo.User"> 
<!--resultType 中也可以写类的别名--> 
select * from user where id = #{id}  <!-- #{id}中id要和实体类User类的属性名一致 --> 
</select>

insert

	属性和select差不多

1.在UserMapper接口中添加对应的方法

在这里插入代码片
//添加一个用户
int addUser(User user);

2.在UserMapper.xml中添加insert语句

在这里插入代码片
<insert id="addUser" parameterType="com.zgx.pojo.User">
    insert into user (id,name,pwd) values (#{id},#{name},#{pwd})
</insert>

测试

在这里插入代码片
@Test
public void testAddUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = new User(1,"bm","qwer");
   int i = mapper.addUser(user);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}

增、删、改需要提交事务

update

1.在UserMapper接口中添加对应的方法

//添加一个用户
int updateUser(User user);

2.在UserMapper.xml中添加insert语句

<update id="updateUser" parameterType="com.zgx.pojo.User">
  update user set name=#{name},pwd=#{pwd} where id = #{id}
</update>

测试

@Test
public void testUpdateUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   User user = mapper.selectUserById(1);
   user.setPwd("asdf");
   int i = mapper.updateUser(user);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}

delete

1.在UserMapper接口中添加对应的方法

//根据id删除用户
int deleteUser(int id);

2.在UserMapper.xml中添加delete语句

<delete id="deleteUser" parameterType="int">
  delete from user where id = #{id}
</delete>

测试

@Test
public void testDeleteUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);
   int i = mapper.deleteUser(5);
   System.out.println(i);
   session.commit(); //提交事务,重点!不写的话不会提交到数据库
   session.close();
}
  1. 所有的增、删、改操作都需要提交事务
  2. 接口的普通参数尽量写上@Param参数

在接口方法的参数前加 @Param属性
Sql语句编写的时候,直接取@Param中设置的值即可,不需要单独设置参数类型

例如

//通过密码和名字查询用户
User selectUserByNP(@Param("username") String username,@Param("pwd") String pwd);

/*
   <select id="selectUserByNP" resultType="com.zgx.pojo.User">
     select * from user where name = #{username} and pwd = #{pwd}
   </select>
*/
  1. 为了规范操作,在SQL的配置文件中,尽量把Parameter参数和resultType都写上!

配置解析

  • mybatis-config.xml 系统核心配置文件
  • mybatis-config.xml 系统核心配置文件
  • 能配置的内容如下:

configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)

注意元素节点的顺序!顺序不对会报错

mappers元素

映射器:定义映射SQL语句的文件

  • 使用相对类路径的资源引用
<mappers>
 <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
  • 使用完全限定资源定位符(URL)
<mappers>
 <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
  • 使用映射器接口实现类的完全限定类名需要配置文件名称和接口名称一致,并且位于同一目录下
<mappers>
 <mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
  • 将包内的映射器接口实现全部注册为映射器但是需要配置文件名称和接口名称一致,并且位于同一目录下
<mappers>
 <package name="org.mybatis.builder"/>
</mappers>
  • Mapper文件
<?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.zgx.mapper.UserMapper">
   
</mapper>

namespace:命名空间

  • Mapper文件命名必须和某个接口同名
  • 接口中的方法必须与映射文件中的sql语句id相同
  • namespace 和子元素的id保证唯一,区别不同的mapper
  • 绑定DAO接口
  • namespace 参数:包名+类名
上一篇:Maven静态资源过滤问题


下一篇:mybatis动态代理