前言: 前面写代码时我们使用sqlSession.selectList("SQLID"),完全是在面向String字符串类型的SQLID编程,虽然能达到操作数据库的目的,但这种代码写法是不规范的。理想中规范的写法是面向接口编程。MyBatis提供了“接口-SQL映射” 的功能。
还记得使用MyBatis Generator工具操作MySQL数据库示例中生成的xxxMapper.xml与xxxMapper.java文件,两者是对应的,这就是“接口-SQL映射” 。
对应关系:
namespace对应包名和接口名:
//xxxMapper.xml
<mapper namespace="mapping.UserinfoMapper">
//xxxMapper.java
package mapping;
public interface UserinfoMapper {}
id对应方法名,parameterType对应参数类型:
//xxxMapper.xml
<insert id="insert" parameterType="bean.Userinfo">
//xxxMapper.java
int insert(Userinfo record);
示例:
在使用MyBatis Generator工具操作MySQL数据库示例基础上操作
修改修改Test.java如下:
package test;
import java.io.IOException;
import java.io.InputStream;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import bean.Userinfo;
import mapping.UserinfoMapper;
public class Test {
public static void main(String[] args) {
try {
Userinfo userinfo=new Userinfo();
userinfo.setUsername("张三");
userinfo.setPassword("123456");
userinfo.setAge(80);
String resource="mybatis-config.xml";
InputStream inputStream=Resources.getResourceAsStream(resource);
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession=sessionFactory.openSession();
//通过动态代理设计模式创建出接口UserinfoMapper.java的实现类
UserinfoMapper userinfoMapper=sqlSession.getMapper(UserinfoMapper.class);
System.out.println(userinfoMapper);
userinfoMapper.insert(userinfo);
sqlSession.commit();
sqlSession.close();
/*userinfo.getId()获取新插入记录在数据库中自动增长生成的值
* 要获取到值必须将UserinfoMapper.xml中<insert id="insert" parameterType="bean.Userinfo">修改为
* <insert id="insert" parameterType="bean.Userinfo" useGeneratedKeys="true" keyProperty="id">
* 否则获取到null,后面的文章再详解*/
System.out.println("createId="+userinfo.getId());
} catch (IOException e) {
e.printStackTrace();
}
}
}
OutPut:
org.apache.ibatis.binding.MapperProxy@36f6e879
createId=xxx //数据库自动增长生成的一个整数值
这里MyBatis动态地创建出了接口UserinfoMapper.java的实现类,示例代码如下:
UserinfoMapper userinfoMapper=sqlSession.getMapper(UserinfoMapper.class);
System.out.println(userinfoMapper);
注意: 这里userinfo.getId()获取新插入记录在数据库中自动增长生成的值。想要获取到值必须将UserinfoMapper.xml中如下代码
<insert id="insert" parameterType="bean.Userinfo">
修改为
<insert id="insert" parameterType="bean.Userinfo" useGeneratedKeys="true" keyProperty="id">
否则获取到null,关于GeneratedKeys后面的文章再详解。