-
namespace
配置文件中namespace中的名称为对应Mapper接口或者Dao接口的完整包名,必须一致! -
增删改查
2.1、在UserMapper中添加对应方法
//查询全部用户
List<User> getUserList();
//根据ID查询用户
User getUserById(int id);
//insert一个用户
int addUser(User user);
//修改用户
int UpdateUser(User user);
//删除用户
int deleteUser(int id);
2.2、在UserMapper.xml中添加Select语句
其中: resultType="com.xiong.pojo.User"为返回值类型
<select id="getUserList" resultType="com.xiong.pojo.User">
select * from user;
</select>
<!-- -->
<!-- id查询语句 -->
<select id="getUserById" resultType="com.xiong.pojo.User">
select * from user where id=#{id};
</select>
<!-- 插入语句 对象中的属性可以直接取出来-->
<insert id="addUser" parameterType="com.xiong.pojo.User">
insert into user (id,name,pwd) values (#{id},#{name},#{pwd});
</insert>
<!-- 修改用户 -->
<update id="UpdateUser" parameterType="com.xiong.pojo.User">
update user set name = #{name},pwd=#{pwd} where id = #{id};
</update>
<!-- 删除用户 -->
<delete id="deleteUser" parameterType="int">
delete from user where id=#{id};
</delete>
其中[#{id} #{name} pwd=#{pwd}]
值需要和User中的定义相一致,User中的需要和数据库相一致.
2.3、测试类中测试
@Test
public void test(){
//第一步:获取sqlSqlSession对象
SqlSession sqlSqlSession = MybatisUtils.getSqlSqlSession();
//第二步:执行sql语句 方式一:getmapper
UserMapper userdao = sqlSqlSession.getMapper(UserMapper.class);
List<User> users = userdao.getUserList();
for (User user:users){
System.out.println(user);
}
//关闭SqlSession
sqlSqlSession.close();
}
@Test
public void getUserById(){
SqlSession sqlSqlSession = MybatisUtils.getSqlSqlSession();
UserMapper mapper = sqlSqlSession.getMapper(UserMapper.class);
User userById = mapper.getUserById(2);
System.out.println(userById);
sqlSqlSession.close();
}
//增删改需要提交事务
@Test
public void addUser(){
SqlSession sqlSqlSession = MybatisUtils.getSqlSqlSession();
UserMapper mapper = sqlSqlSession.getMapper(UserMapper.class);
int res = mapper.addUser(new User(4, "小明", "25846"));
if (res>0){
System.out.println("插入成功!");
}
//提交事务
sqlSqlSession.commit();//没有提交事务,会插入不成功
sqlSqlSession.close();
}
//修改用户
@Test
public void updateUser(){
SqlSession sqlSqlSession = MybatisUtils.getSqlSqlSession();
UserMapper mapper = sqlSqlSession.getMapper(UserMapper.class);
mapper.UpdateUser(new User(4,"小红","8554647"));
//提交事务
sqlSqlSession.commit();//没有提交事务,会插入不成功
sqlSqlSession.close();
}
//删除用户
@Test
public void deleteUser(){
SqlSession sqlSqlSession = MybatisUtils.getSqlSqlSession();
UserMapper mapper = sqlSqlSession.getMapper(UserMapper.class);
mapper.deleteUser(4);
//提交事务
sqlSqlSession.commit();//没有提交事务,会插入不成功
sqlSqlSession.close();
}
Map方式编写:
用Map
1、在接口方法中,参数直接传递Map;
User selectUserById2(Map<String,Object> map);
2、编写sql语句的时候,需要传递参数类型,参数类型为map
@Test
public void selectUserById2(){
SqlSession sqlSqlSession = MybatisUtils.getSqlSqlSession();
UserMapper mapper = sqlSqlSession.getMapper(UserMapper.class);
Map<String, Object> map = new HashMap<String, Object>();
map.put("a",1);
User user = mapper.selectUserById2(map);
System.out.println(user);
sqlSqlSession.close();
}
#{a} 不一定与User中的属性相对应,可以随意编写
3、在使用方法的时候,Map的 key 为 sql中取的值即可,没有顺序要求!
Map<String, Object> map = new HashMap<String, Object>();
map.put("a",1);
User user = mapper.selectUserById2(map);
如果参数过多,我们可以考虑直接使用Map实现,(好处在于传参的到时候可以不用与User相对应,只需key,value的形式进行写入)
如果参数比较少,直接传递参数即可
可能出现的错误:
1.标签匹配错误
2.resource绑定mapper,需要使用路径
3.程序配置文件必须符合规范
4.空指针异常,没有注册到资源
4.输出的XML文件中存在中文乱码问题
5.maven资源没有导出问题