SQL映射器Mapper接口(MyBatis)
程序员文章站
2022-06-14 17:33:46
SQL映射器Mapper接口 MyBatis基于代理机制,可以让我们无需再写Dao的实现。直接把以前的dao接口定义成符合规则的Mapper。 注意事项: 1.接口必须以Mapper结尾,名字是DomainMapper 2.mapper.xml文件要和Mapper接口建立关系,通过namespace ......
sql映射器mapper接口
mybatis基于代理机制,可以让我们无需再写dao的实现。直接把以前的dao接口定义成符合规则的mapper。
注意事项:
1.接口必须以mapper结尾,名字是domainmapper
2.mapper.xml文件要和mapper接口建立关系,通过namespace:要能连接到mapper接口
3.mapper.xml中写查询语句的标签的传入参数类型(parametertype)、返回结果类型(resulttype)必须和mapper接口中对应方法的传入参数类型和返回结果类型一致,id名字必须和mapper接口中的对应方法名保持一致。
操作步骤:
1、 创建一个domainmapper接口:直接定义方法(共用了xml配置方式和接口+注解方式两种)
注意:映射器mapper接口,替换dao层,不用再写mapper层(dao层)实现类;名字统一以mapper结尾。
package cn.wang._02mapper.mapper; import cn.wang._02mapper.domain.product; import org.apache.ibatis.annotations.select; import java.util.list; public interface productmapper { /** * 查询一个商品:使用了接口+注解的方式 */ @select("select * from product where id = #{id}") product findone(long id); /** * 查询所有商品:使用了xml配置方式 */ list<product> findall(); }
2、 在mapper目录(原dao目录)下创建映射文件domainmapper.xml(productmapper.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的主要功能就是写sql namespace:mapper接口的完全限定名,在mybatis映射器中是用来和映射器接口产生联系,而不再是和domain实体类联系 --> <mapper namespace="cn.wang._02mapper.mapper.productmapper"> <!-- sql的id:mapper接口的对应方法名 resulttype和parametertype都和方法的参数和返回类型对应 parametertype : 传入的参数类型(原本应该用的是全限定名,这里用的是别名) long:大long _long:小long (具体的对应请参见文档) resulttype : 返回的结果类型(每一条数据返回的对象类型) 自己的对象一定是全限定类名(这里写的是别名) 注意:xml配置方式和接口+注解方式两种方式不能同时对同一sql操作使用 --> <!--查询一个--> <!--<select id="findone" parametertype="long" resulttype="cn.wang._02mapper.domain.product"> select * from product where id=#{id} </select>--> <!--查询所有--> <select id="findall" resulttype="cn.wang._02mapper.domain.product"> select * from product </select> </mapper>
3、在resources目录下创建核心配置文件:
<?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:默认使用哪一个环境(必须对应一个环境的id) --> <!--引入外部的属性文件 不写classpath的原因:resources默认到classpath中寻找资源 --> <properties resource="jdbc.properties" /> <!-- 配置自定义别名 注意:别名不区分大小写。 共两种配置方式: 一:一个一个配置(typealias) type 类型的完全限定名 alias 别名 二:统一为某个包下的所有类起别名(package) name : 包名,别名就是类名(不区分大小写) --> <environments default="development"> <!-- environment:一个环境 id:为这个环境取唯一一个id名称 --> <environment id="development"> <!-- transactionmanager:事务管理(共有两个值) type:jdbc(支持事务)/managed(什么都不做) --> <transactionmanager type="jdbc" /> <!-- 数据源, 连接池 type(pooled):mybatis自带的连接池 type="unpooled" 不使用连接池 type="pooled" 使用连接池 type="jndi" 容器中使用 --> <datasource type="pooled"> <!-- 连接数据库的参数 --> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </datasource> </environment> </environments> <!-- 注册映射文件,这个mappers代表的是相应的orm映射文件 --> <mappers> <mapper resource="cn/wang/_02mapper/mapper/productmapper.xml" /> </mappers> </configuration>
mybatisutils工具类
package cn.wang.utils; 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 java.io.reader; public class mybatisutils { //保证sqlsessionfactory是单例 private static sqlsessionfactory sqlsessionfactory; // sqlsessionfactory类似于jpa的entitymanagerfactory,hibernate的sessionfactory // sqlsession 类似于jpa的entitymanager,hibernate的session //该类被加载的时候就执行该静态代码块 static { try { reader reader = resources.getresourceasreader("mybatis-config.xml"); sqlsessionfactory = new sqlsessionfactorybuilder().build(reader); } catch (exception e) {//异常的类型要写大一些,才能够看到具体的报错 e.printstacktrace(); } } //提供一个外界调用的类 public static sqlsession getsession(){ //创建并返回sqlsession对象 return sqlsessionfactory.opensession(); } //关闭sqlsession,释放资源(很重要,不然项目上线后会造成内存溢出) public static void colsesession(sqlsession sqlsession){ if(sqlsession !=null){ sqlsession.close(); } } }
jdbc.properties文件
jdbc.driver=com.mysql.jdbc.driver jdbc.url=jdbc:mysql:///mysql数据库名称 jdbc.username=用户名 jdbc.password=密码
可能遇到的错误:
(1)namespace写错了,应该对应mapper接口的完全限定名。
(2)mapper映射文件忘记在核心配置文件中注册了。
(3)注册的路径也可能写错。
上一篇: 李世民有几个儿子?李世民的儿子为什么大部分都死了?
下一篇: C#从命令行读取参数的方法
推荐阅读
-
SQL映射器Mapper接口(MyBatis)
-
mybatis 的 dao 接口跟 xml 文件里面的 sql 是如何建立关系的?一步步解析
-
MyBatis3使用注解配置SQL映射器
-
MyBatis3使用xml配置sql映射器
-
TKmybatis的使用,MyBatis的Mapper接口、Example方法
-
MyBatis与Spring的整合(传统的DAO方式和Mapper接口方式)
-
MyBatis Mapper在Spring中的扫描和接口代理
-
MyBatis中通用Mapper接口以及Example的方法解析
-
Mybatis 源码学习(二) Mapper 接口和sql的映射
-
Mybatis映射器接口代理对象的方式 运行过程