关于mybatis实现dao层mapper开发,它可以不用写实现类,它能以代理方式自动生成实现代码。
但是,使用mapper开发,必须遵循以下原则:
一.自己定义的接口名需和mapper映射文件的名保持一致,并且在同一目录下
mapper.xml文件里的namespace属性值和接口必须一致,不然就会报错的
二.接口中的方法名必须和mapper.xml中的id保持一致
三.接口中的方法名必须和mapper.xml配置中的resultType保持一致
四.参数的类型保持一致
用mapper开发dao层就不要关注sqlSession对象的方法调用了增删改查方法,返回一个接口的代理对象,直接调用该对象的方法即可
|
@Test |
使用mapper开发,它的参数只有一个(如果有多余的参数,可以将多余的参数封装成pojo类)
mybatis自动识别接口中的方法的返回值,从而调用它们的增删改查方法。
下面上一段完整的实例,使用mapper实现具体的增删改查
首先创建一个bean类并生成get和set方法
public class User { private Integer id; private String name; private String sex; private String address; private Integer balance; public User() { } public User(Integer id, String name, String sex, String address, Integer balance) { this.id = id; this.name = name; this.sex = sex; this.address = address; this.balance = balance; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } public Integer getBalance() { return balance; } public void setBalance(Integer balance) { this.balance = balance; } @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", address='" + address + '\'' + ", balance=" + balance + '}'; } }
然后配置sqlMapConfig.xml文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <!--开发环境--> <environments default="development"> <environment id="development"> <!--配置事务管理--> <transactionManager type="JDBC"></transactionManager> <!--连接池--> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=true&characterEncoding=utf-8"></property> <property name="username" value="root"></property> <property name="password" value="1234"></property> </dataSource> </environment> </environments> <mappers> <mapper resource="cn/hd/mapper/UserMapper.xml"></mapper> </mappers> </configuration>再创建类配置文件userMapper.xml
<?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="cn.hd.mapper.UserMapper"> <!--查询--> <select id="findUserById" parameterType="Integer" resultType="cn.hd.pojo.User" > SELECT * FROM mbs WHERE id = #{id} </select> <!--模糊查询 #占位符 $字符串拼接 sql注入(不建议使用) 也使用占位符1.直接将整个当成参数在代码中传递时手动拼接 2.sql提供 $#区别 #里面变量名随意 ${变量名}不能随便写如果是常用类型,必须用value --> <select id="findByName" parameterType="String" resultType="cn.hd.pojo.User"> SELECT * FROM mbs WHERE name LIKE "%"#{name}"%" </select> <!--添加用户 如果参数是引用类型 占位符的赋值方式为ognl表达式的方式{属性名}--> <insert id="UserAdd" parameterType="cn.hd.pojo.User"> <selectKey order="AFTER" resultType="int" keyProperty="id"> SELECT LAST_INSERT_ID() </selectKey> INSERT INTO mbs (id,name,sex,address,balance)VALUES(#{id},#{name},#{sex},#{address},#{balance}) </insert> <!--删除用户--> <delete id="UserDelete" parameterType="int"> DELETE FROM mbs WHERE id=#{id} </delete> <!--修改用户--> <update id="UserUpdate" parameterType="cn.hd.pojo.User"> UPDATE mbs set name=#{name},sex=#{sex},address=#{address},balance=#{balance} WHERE id=#{id} </update> </mapper>
再创建实现增删改查的接口,不需要实现接口哦
package cn.hd.mapper; import java.util.List; public interface UserMapper { User findUserById(Integer id); List<User> findByName(String name); int UserAdd(User user); int UserDelete(Integer id); int UserUpdate(User user); }
最后创建测试类
public class DemoMapper { @Test public void fun() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User userById = mapper.findUserById(1); System.out.println(userById); } @Test public void fun1() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); List<User> list = mapper.findByName("莫"); sqlSession.commit(); sqlSession.close(); System.out.println(list); } @Test public void fun2() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setName("雷锋"); user.setAddress("河南"); user.setSex("男"); user.setBalance(500); int row=mapper.UserAdd(user); sqlSession.commit(); sqlSession.close(); System.out.println(row); } @Test public void fun3() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); int row = mapper.UserDelete(10); sqlSession.commit(); sqlSession.close(); System.out.println(row); } @Test public void fun4() throws IOException { InputStream resourceAsStream = Resources.getResourceAsStream("cn/hd/mapper/sqlMapConfig.xml"); SqlSessionFactory build = new SqlSessionFactoryBuilder().build(resourceAsStream); SqlSession sqlSession = build.openSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = new User(); user.setId(8); user.setName("雷锋"); user.setAddress("河南"); user.setSex("男"); user.setBalance(500); int row= mapper.UserUpdate(user); sqlSession.commit(); sqlSession.close(); System.out.println(row); } }
以上就是使用mapper实现的增删改查的实例了,结果以截图给大家展示
数据库展示
到此mapper开发dao层带刺告一段落