3.1、namespace
namespace中的包名要和Dao/mapper借口一致!
3.2、select
选择、查询语句;
id: 就是对应namespace中的方法名
resultType: sql语句执行的返回值
parameterType :参数的类型
Mapper接口
//查询全部用户
List<User> getUserList();
//根据ID查询用户
User getUserById(int id);
配置文件(实现接口)
<!--select查询全部用户-->
<select id="getUserList" resultType="com.pojo.User">
select *
from mybatis.user
</select>
<!--通过ID查询用户-->
<select id="getUserById" parameterType="int" resultType="com.pojo.User">
select *
from mybatis.user
where `id` = #{id}
</select>
测试类
//查询全部用户
@Test
public void test() {
//第一步: 获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL方式一: getMapper(推荐)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
List<User> userList = userMapper.getUserList();
//执行SQL方式二:
//List<User> userList1 = sqlSession.selectList("com.dao.UserMapper.getUserList");
for (User user : userList) {
System.out.println(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭SqlSession
sqlSession.close();
}
}
//根据ID查询用户
@Test
public void getUserById() {
//第一步: 获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL方式一: getMapper(推荐)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.getUserById(2);
System.out.println(user);
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭SqlSession
sqlSession.close();
}
}
3.3、insert
插入语句;
id: 就是对应namespace中的方法名
parameterType :参数的类型
Mapper接口
//插入一个用户
Boolean addUser(User user);
配置文件(实现接口)
<!--插入一个用户-->
<insert id="addUser" parameterType="com.pojo.User">
<!--对象中的属性可以直接取出来-->
insert into mybatis.user (`id`,`name`,`pwd`) value(#{id},#{name},#{pwd})
</insert>
测试类
//插入一个用户
@Test
public void addUser() {
//第一步: 获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL方式一: getMapper(推荐)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(5);
user.setName("颜良文丑");
user.setPwd("123456");
Boolean flag = userMapper.addUser(user);
if (flag) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//增删改操作一定要提交事务!!!
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
3.4、updeat
修改语句;
id: 就是对应namespace中的方法名
parameterType :参数的类型
Mapper接口
//修改用户(通过id)
Boolean updateUser(User user);
配置文件(实现接口)
<!-- 修改用户-->
<update id="updateUser" parameterType="com.pojo.User">
update mybatis.user
set `name` =#{name},
`pwd`=#{pwd}
where `id` = #{id};
</update>
测试类
//修改用户(通过id)
@Test
public void updateUser() {
//第一步: 获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL方式一: getMapper(推荐)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setId(5);
user.setName("海王王");
user.setPwd("123456");
Boolean flag = userMapper.updateUser(user);
if (flag) {
System.out.println("修改成功");
} else {
System.out.println("修改失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//增删改操作一定要提交事务!!!
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
3.5、delete
删除语句;
id: 就是对应namespace中的方法名
parameterType :参数的类型
Mapper接口
//通过id删除用户
Boolean deleteUser(int id);
配置文件(实现接口)
<!-- 删除用户-->
<delete id="deleteUser" parameterType="int">
delete
from mybatis.user
where `id` = #{id}
</delete>
测试类
//通过id删除用户
@Test
public void deleteUser(){
//第一步: 获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL方式一: getMapper(推荐)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Boolean flag = userMapper.deleteUser(5);
if (flag) {
System.out.println("删除成功");
} else {
System.out.println("删除失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//增删改操作一定要提交事务!!!
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
3.6、分析错误
XML中文乱码问题修改IDEA文件编码中的项目编码就可以了
3.7、万能Map
<!--万能的Map
参数过多时用Map不用写出所有属性
-->
<insert id="addUser2" parameterType="map">
insert into mybatis.user (`id`,`name`) value(#{userid},#{username})
</insert>
//万能的Map
@Test
public void addUser2() {
//第一步: 获得SqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession();
try {
//执行SQL方式一: getMapper(推荐)
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("userid", 5);
map.put("username", "药王");
Boolean flag = userMapper.addUser2(map);
if (flag) {
System.out.println("添加成功");
} else {
System.out.println("添加失败");
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//增删改操作一定要提交事务!!!
sqlSession.commit();
//关闭SqlSession
sqlSession.close();
}
}
Map传递参数, 直接在sql中取出key即可!
对象传递成熟, 直接在qsl中去出对象的属性
只有一个基本类型的情况下, 可以直接用sql取到
多个参数用Map或者注解
3.8、思考问题
模糊查询怎么写?
1.Java代码执行时, 传递通配符%%List<User> userList = userMapper.getUserLike(**"%身%"**);
2.sql中拼接通配符select *from mybatis.userwhere name like "%"#{value}"%"