Mybatis(02)

mac2022-06-30  26

Mybatis(02)

参考文献https://mybatis.org/mybatis-3/zh/getting-started.html

(一)CRUD(增删改除)

1、namespace

<!--namespace=绑定一个对应的Dao/Mapper接口--> 如<mapper namespace="com.qin.dao.UserDaoMapper">

(1)select

1.查找所有

第一步 编写接口

public interface UserDaoMapper { User getUserById(int id); }

第二步在对应的xml文件的mapper中编写SQL语句

<select id="getUserList" resultMap="User"> select *from user </select>

id:对象接口中的方法名 resultMap:对应查询的返回值类型

第三步测试

public class UserDaoTest { @Test public void getUserLike(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> userList = mapper.getUserList(); for (User user : userList) { System.out.println(user); } sqlSession.close(); } }

2、查询单个

第一步 写接口的方法

User getUserById(int id);

第二步在对应的xml文件的mapper中编写SQL语句

<select id="getUserById" resultType="User"> select * from user where id=#{id} </select>

第三步测试

@Test public void getUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User userById = mapper.getUserById(1); System.out.println(userById); sqlSession.close(); }

(二)Insert

第一步 写接口

Inset返回值为int类型 传入一个实体类

//insert一个用户 int addUser(User user);

第二步 在对应的Mapper文件中编写SQL语句

//在Insert中返回值类型可以用写

<insert id="addUser" parameterType="User"> insert into user (id, name, pwd) values (#{id},#{name},#{pwd} ); </insert>

第三步 写测试

@Test public void addUser(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setId(4); user.setName("刘德华"); user.setPwd("12345"); int i = mapper.addUser(user); if (i>0){ System.out.println("添加成功"); } sqlSession.close(); }

三、update

第一步 写接口

int updateUser(User user);

第二步在对应的xml文件的mapper中编写SQL语句

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

第三步 写测试

@Test public void update(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user= new User(2, "wangwu", "111"); int i = mapper.updateUser(user); sqlSession.commit(); }

四、Delete

第一步 写接口

int deleteUser(int id);

第二步在对应的xml文件的mapper中编写SQL语句

<delete id="deleteUser" parameterType="int"> delete from user where id = #{id}; </delete> @Test public void Delete(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int i = mapper.deleteUser(1); sqlSession.commit(); sqlSession.close(); }

五、分析错误

标签不要匹配错resource 绑定mapper,需要使用路径!程序配置文件必须符合规范!NullPointerException,没有注册到资源!输出的xml文件中存在中文乱码问题!maven资源没有导出问题!

(三) 万能Map

假设,我们的实体类,或者数据库中的表,字段或者参数过多,我们应当考虑使用Map!

//万能的Map int addUser2(Map<String,Object> map); <!--对象中的属性,可以直接取出来 传递map的key--> <insert id="addUser" parameterType="map"> insert into mybatis.user (id, pwd) values (#{userid},#{passWord}); </insert> @Test public void addUser2(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> map = new HashMap<String, Object>(); map.put("userid",5); map.put("passWord","2222333"); mapper.addUser2(map); sqlSession.close(); } Map传递参数,直接在sql中取出key即可! 【parameterType="map"】

对象传递参数,直接在sql中取对象的属性即可!【parameterType=“Object”】

只有一个基本类型参数的情况下,可以直接在sql中取到!

多个参数用Map,**或者注解!

最新回复(0)