一.增删改
1、新增
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'admin','123456',23,'男')
</insert>
2、删除
<!--int deleteUser();-->
<delete id="deleteUser">
delete from t_user where id = 7
</delete>
3、修改
<!--int updateUser();-->
<update id="updateUser">
update t_user set username='ybc',password='123' where id = 6
</update>
二.查询功能
select标签必须设置属性resultType或resultMap,用于设置实体类和数据库表的映射关系
- resultType:自动映射,用于属性名和表中字段名一致的情况
- resultMap:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
1、查询单行单列
/**
* 查询用户的总记录数
* @return
* 在MyBatis中,对于Java中常用的类型都设置了类型别名
* 例如: java.lang.Integer-->int|integer
* 例如: int-->_int|_integer
* 例如: Map-->map,List-->list
*/
int getCount();
<!--Integer getCount();-->
<select id="getCount" resultType="_integer">
select count(*) from t_user
</select>
2、查询一个实体对象
查询出的数据只有一条,可以通过实体类对象或者集合接收
<!--User selectUserById(@Param("id") Integer id);-->
<select id="selectUserById" resultType="User">
select * from t_user where id = #{id}
</select>
3、查询一个List集合
当查询的数据为多条时,不能使用实体类作为返回值,否则会抛出异常 TooManyResultsException;
但是若查询的数据只有一条,可以使用实体类或集合作为返回值
<!--List<User> selectAllUser();-->
<select id="selectAllUser" resultType="list">
select * from t_user
</select>
4、查询一条数据为Map
<!--Map<String,Object> getUserByIdToMamp(@Param("id") Integer id);-->
<select id="getUserByIdToMamp" resultType="map">
select * from t_user where id = #{id}
</select>
5、查询多条数据为Map
5.1 将表中的数据以map集合的方式查询,一条数据对应一个map;
若有多条数据,就会产生多个map集合将这些map放在一个list集合中获取
<!--List<Map<String, Object>> getAllUserToMap();-->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
5.2 通过@MapKey注解设置map集合的键,值是每条数据所对应的map集合
<!--Map<String, Object> getAllUserToMap();-->
<!--
{
1={password=123456, sex=男, id=1, age=23, username=admin},
2={password=123456, sex=男, id=2, age=23, username=张三},
3={password=123456, sex=男, id=3, age=23, username=张三}
}
-->
<select id="getAllUserToMap" resultType="map">
select * from t_user
</select>
二.获取参数
${}:本质是字符串拼接。使用字符串拼接的方式拼接SQL,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号
#{}:本质是占位符赋值。使用占位符赋值的方式拼接SQL,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
1、单个字面量类型的参数
方法参数为单个的字面量类型,此时可以通过${}和#{}以任意的字符串获取参数值。
<select id="getUserByUsername" resultType="User">
select * from t_user where username = #{username}
</select>
<select id="getUserByUsername" resultType="User">
select * from t_user where username = '${username}'
</select>
2、多个字面量类型的参数
mapper接口方法的参数为多个时,此时MyBatis会将这些参数放在一个map集合中,以两种方式进行存储,通过#{},${}以键的方式访问值即可.
- 第一种:以arg0,arg1...为键,以参数为值
- 第二种:以param1,param2...为键,以参数为值
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = #{arg0} and password = #{arg1}
</select>
<!--User checkLogin(String username,String password);-->
<select id="checkLogin" resultType="User">
select * from t_user where username = '${param1}' and password = '${param2}'
</select>
3、实体类对象参数
mapper接口方法的参数是实体类对象的参数
通过#{},${}直接访问实体类对象中的属性名获取属性值
@Test
public void insertUser() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
User user = new User(null,"Tom","123456",12,"男","123@321.com");
mapper.insertUser(user);
}
<!--int insertUser(User user);-->
<insert id="insertUser">
insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email})
</insert>
4、Map集合类型的参数
若mapper接口方法的参数有多个时,可以手动将这些参数放入到一个map中存储。
只需要通过#{},${}以键的方式访问我们自己定义的key即可。
@Test
public void checkLoginByMap() {
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
ParameterMapper mapper = sqlSession.getMapper(ParameterMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("usermane","admin");
map.put("password","123456");
User user = mapper.checkLoginByMap(map);
System.out.println(user);
}
<!--User checkLoginByMap(Map<String,Object> map);-->
<select id="checkLoginByMap" resultType="User">
select * from t_user where username = #{username} and password = #{password}
</select>
5、List集合类型的参数
如果传入的参数是List集合类型, 默认的获取参数有三种,
- 第一种:以arg0 为键,以集合为值。
- 第二种:以collection为键,以集合为值。
- 第三种:以list为键,以集合为值。
6、@Param注解
使用@Param注解标识mapper接口中的方法参数,MyBatis将数据放入Map集合中,以两种方式进行存储:
- 以Param注解的value值为键,以参数为值
- 以param1,param2...为键,以参数为值
通过#{},${}以键的方式访问值即可
public interface ParameterMapper {
User checkLoginByParam(@Param("username") String username,
@Param("password") String password);
}
<select id="checkLoginByParam" resultType="User">
select * from t_user where username = #{username}
And password = #{password}
</select>