使用这种模式程序员需要编写mapper.xml文件,程序员编写mapper接口要遵循规范,mybatis可以自动生成mapper接口实现类代理对象。
开发规范:
1.在mapper.xml中namespace等于mapper接口地址。
<mapper namespace="com.test.dao.UserMapper">
2.mapper.java接口中的方法名和mapper.xml中statement的id的名字一致。
<select id="findUserById"
3.mapper.java接口中方法输入参数类型和mapper.xml中statement的parameterType指定的类型保持一致。
4.mapper.java接口中的方法返回值类型和mapper.xml中statement的resultType指定的类型保持一致。
案例如下:
1.User.java 文件参考MyBatis实现增删改查
2.SqlMapConfig.xml
1 <!DOCTYPE configuration 2 PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 3 "http://mybatis.org/dtd/mybatis-3-config.dtd"> 4 <configuration> 5 <!-- 和spring整合后 environments配置将废除 mybatis-config.xml--> 6 <environments default="development"> 7 <environment id="development"> 8 <!-- 使用jdbc事务管理--> 9 <transactionManager type="JDBC" /> 10 <!-- 数据库连接池--> 11 <dataSource type="POOLED"> 12 <property name="driver" value="oracle.jdbc.driver.OracleDriver" /> 13 <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" /> 14 <property name="username" value="dsx" /> 15 <property name="password" value="admin" /> 16 </dataSource> 17 </environment> 18 </environments> 19 20 <!-- 加载mapper.xml --> 21 <mappers> 22 <mapper resource="com/test/dao/UserMapper.xml" /> 23 </mappers> 24 25 </configuration>
3.UserMapper.java接口
package com.test.dao; import com.test.entity.User; /** * * @author Mr * Mapper接口代理模式开发命名一定是:实体类名+Mapper * * 使用mapper开发步骤: * 1.编写接口和mapper.xml要遵循4个指标 * 2.SqlMapConfig.xml中加载UserMapper.xml */ public interface UserMapper { //根据用户id查询用户 public User findUserById(int id); //添加用户 public void addUser(User user); //删除用户条目 public void delUserById(int id); //根据id更新用户信息 public void upUserById(int id); }
4.UserMapper.xml配置文件 和第3步在同一包下
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE mapper 3 PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 4 "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 5 <!-- namespace命名空间是UserMapper接口的全类名--> 6 <mapper namespace="com.test.dao.UserMapper"> 7 <!-- 这里可以配置多个sql 8 根据用户的id查询 9 --> 10 <select id="findUserById" parameterType="int" resultType="com.test.entity.User"> 11 select * from userss WHERE ID=#{id} 12 </select> 13 <!-- 添加用户 --> 14 <insert id="addUser" parameterType="com.test.entity.User"> 15 insert into userss values(seq_users_id.nextval,#{username},#{birthday},#{sex},#{address}) 16 </insert> 17 18 </mapper>
5.测试类
1 package com.test.demo; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.util.Date; 6 7 import org.apache.ibatis.io.Resources; 8 import org.apache.ibatis.session.SqlSession; 9 import org.apache.ibatis.session.SqlSessionFactory; 10 import org.apache.ibatis.session.SqlSessionFactoryBuilder; 11 12 import com.test.dao.UserMapper; 13 import com.test.entity.User; 14 15 /** 16 * 17 * @author Mr 18 * 只写了接口,没有写接口的实现类 19 */ 20 public class Test3 { 21 22 public static void main(String[] args) { 23 // TODO Auto-generated method stub 24 try { 25 //mybatis核心配置文件 26 String resource = "SqlMapConfig.xml"; 27 //读取配置文件 28 InputStream inputStream = Resources.getResourceAsStream(resource); 29 //获取工厂 30 SqlSessionFactory sf = new SqlSessionFactoryBuilder().build(inputStream); 31 //获取数据库操作对象 32 SqlSession sqlSession = sf.openSession(); 33 //通过反射机制自动生成接口实现类 34 UserMapper um = sqlSession.getMapper(UserMapper.class); 35 /* //调用方法获取对象 36 User user = um.findUserById(31); 37 System.out.println(user);*/ 38 39 //添加用户 40 User user = new User("老赵", new Date(), "1", "宁夏回族自治区"); 41 um.addUser(user); 42 sqlSession.commit(); 43 System.out.println(user); 44 45 } catch (IOException e) { 46 // TODO Auto-generated catch block 47 e.printStackTrace(); 48 } 49 50 51 } 52 53 }