Mybatis31实战Word下载.docx
- 文档编号:18502111
- 上传时间:2022-12-18
- 格式:DOCX
- 页数:48
- 大小:112.67KB
Mybatis31实战Word下载.docx
《Mybatis31实战Word下载.docx》由会员分享,可在线阅读,更多相关《Mybatis31实战Word下载.docx(48页珍藏版)》请在冰豆网上搜索。
MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。
MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(PlanOldJavaObjects,普通的Java对象)映射成数据库中的记录。
3、Mybatis入门实例
在maven中加入mybatis、mysql、junit的依赖包:
<
dependency>
<
groupId>
junit<
/groupId>
artifactId>
/artifactId>
version>
4.10<
/version>
scope>
test<
/scope>
/dependency>
org.mybatis<
mybatis<
3.1.1<
mysql<
mysql-connector-java<
5.1.21<
commons-logging<
1.1.1<
log4j<
1.2.17<
创建数据库
Createtablestudent(idintprimarykeyautoincrement,ageint,namevarchar(23));
在mysql数据中创建student表。
配置SqlmapConfiguration.xml,在src目录下面的resources目录下面创建此文件,内容如下:
<
configuration>
!
--引入外部数据库配置文件-->
propertiesresource="
database.properties"
/>
--
类型别名是为Java类型命名一个短的名字。
它只和XML配置有关,只用来减少类完全限定名的多余部分。
例如:
使用这个配置,“Student”可以任意用来替代“com.marcle.domain.Student”所使用的地方。
对于普通的Java类型,有许多内建的类型别名。
它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。
-->
typeAliases>
typeAliastype="
com.pango.mybatis.entity.Student"
alias="
Student"
com.pango.mybatis.entity.Status"
Status"
/typeAliases>
environments下用于配置不同数据库环境
environmentsdefault="
development"
>
environmentid="
在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
JDBC–这个配置直接简单使用了JDBC的提交和回滚设置。
它依赖于从数据源得到的连接来管理事务范围。
MANAGED–这个配置几乎没做什么。
它从来不提交或回滚一个连接。
而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。
默认情况下它会关闭连接。
然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false
-->
transactionManagertype="
JDBC"
--数据源的配置
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。
许多MyBatis的应用程序将会按示例中的例子来配置数据源。
然而它并不是必须的。
要知道为了方便使用延迟加载,数据源才是必须的
有三种内建的数据源类型
UNPOOLED–这个数据源的实现是每次被请求时简单打开和关闭连接。
它有一点慢,这是对简单应用程序的一个很好的选择,因为它不需要及时的可用连接。
不同的数据库对这个的表现也是不一样的,所以对某些数据库来说配置数据源并不重要,这个配置也是闲置的
POOLED–这是JDB法C连接对象的数据源连接池的实现,用来避免创建新的连接实例时必要的初始连接和认证时间。
这是一种当前Web应用程序用来快速响应请求很流行的方
JNDI–这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用
dataSourcetype="
POOLED"
<
propertyname="
driver"
value="
${database.driver}"
/>
url"
${database.url}"
username"
${database.user}"
password"
${database.password}"
/dataSource>
/environment>
/environments>
mappers>
--指定要用到的mapper文件。
以下的resource属性告诉
MyBatis要在类路径下的resources目录下找student.xml文件。
我们将把mapper文件存放在src目录下的resources目录中。
-->
mapperresource="
case/student.xml"
/mappers>
/configuration>
其中外部引入的jdbc.properties内容如下:
database.driver=com.mysql.jdbc.Driver
database.url=jdbc:
mysql:
//localhost:
3306/mybatis_01
database.user=root
database.password=marcle
创建mapper文件,在resources目录下面的case文件夹下面创建student.xml文件
mappernamespace="
com.pango.mybatis.dao.StudentDao"
resultMaptype="
id="
Student_Map"
idproperty="
id"
column="
resultproperty="
age"
name"
/resultMap>
insertid="
insert"
parameterType="
insertintostudent(age,name)values(#{age},#{name})
/insert>
selectid="
select"
resultType="
int"
select*fromstudentwhereid=#{id}
/select>
<
/mapper>
创建实体类及接口
Student类
publicclassStudentimplementsSerializable{
privateLongid;
privateintage;
privateStringname;
publicLonggetId(){
returnid;
}
publicvoidsetId(Longid){
this.id=id;
publicintgetAge(){
returnage;
publicvoidsetAge(intage){
this.age=age;
publicStringgetName(){
returnname;
publicvoidsetName(Stringname){
this.name=name;
}
StudentDao接口
publicinterfaceStudentDao{
publicStudentselect(intid);
publicvoidinsert(Studentstudent);
SqlMapUtil工具类及数据调用
publicclassSqlMapUtils{
privatestaticfinalLoggerlogger=LogManager.getLogger(SqlMapUtils.class);
privatestaticfinalStringCONFIG_FILE_PATH="
mybatis-config.xml"
;
privateSqlSessionFactorysessionFactory=null;
privateSqlSessionsession=null;
privatestaticSqlMapUtilsinstance=null;
publicSqlMapUtils(){
Readerreader=null;
try{
reader=Resources.getResourceAsReader(CONFIG_FILE_PATH);
sessionFactory=newSqlSessionFactoryBuilder().build(reader);
session=sessionFactory.openSession();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
logger.fatal("
IOExceptionoccuredwhilereadingtheConfigurationFile\n"
+e);
e.printStackTrace();
}finally{
if(reader!
=null){
try{
reader.close();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
publicstaticsynchronizedSqlMapUtilsgetInstance(){
if(instance==null){
synchronized(SqlMapUtils.class){
instance=newSqlMapUtils();
returninstance;
publicSqlSessiongetSession(){
if(session==null){
thrownewRuntimeException("
CreateSqlSessionfailed."
);
returnsession;
完成上面的步骤后,我们写一个测试类,测试上面所写的内容:
publicclassStudentDaoTest{
privateStudentDaostudentMapper;
privateSqlSessionsession;
@Before
publicvoidinit(){
session=SqlMapUtils.getInstance().getSession();
studentMapper=session.getMapper(StudentDao.class);
@Test
publicvoidtestInsert(){
Studentstudent=newStudent();
student.setAge(34);
student.setName("
luce"
studentMapper.insert(student);
mit();
publicvoidtestFind(){
Studentstudent=studentMapper.select(3);
System.out.println(student.getName());
@After
publicvoidend(){
session.close();
通过上面的几个步骤,我们就创建了一个完整的mybatis实例,通过这个实例,想必大家对mybatis有个初步的了解了。
4、Mybatis中的增、删、改、查
这部分将向大家介绍对数据库得基本操作:
增、删、改、查,在下面的实例中我们仍然以上面讲到的入门列子中的数据库、实体类、SqlmapConfiguration.xml配置文件及sqlMapUtil类,所以在本节中,只写明本节涉及到的内容,对于重复的内容大家可以参考上面的入门列子。
1、student.xml配置文件
?
xmlversion="
1.0"
encoding="
UTF-8"
DOCTYPEmapper
PUBLIC"
-//ibatis.apache.org//DTDMapper3.0//EN"
"
http:
//ibatis.apache.org/dtd/ibatis-3-mapper.dtd"
--命名空间-->
studentns"
--结果集映射从实体对象到关系数据库-->
--向数据库插入一条数据parameterType表示参数的类型-->
注意参数注释:
#{id}
这就告诉MyBatis创建一个预处理语句参数。
使用JDBC,这样的一个参数在SQL中会由一个“?
”来标识,并被传递到一个新的预处理语句中,就像这样:
//SimilarJDBCcode,NOTMyBatis…
StringselectPerson=“SELECT*FROMPERSONWHEREID=?
”;
PreparedStatementps=conn.prepareStatement(selectPerson);
ps.setInt(1,id);
当然,这需要很多单独的JDBC的代码来提取结果并将它们映射到对象实例中,这就是MyBatis节省你时间的地方。
我们需要深入了解参数和结果映射。
那些细节部分我们下面来了解。
-->
--根据特定id查找数据,其中resultType为指定的返回类型parameterType为传入参数类型-->
--更新学生数据-->
updateid="
update"
updatestudentsetage=#{age},name=#{name}whereid=#{id}
/update>
--删除学生数据-->
deleteid="
delete"
deletefromstudentwhereid=#{id}
/delete>
上面配置文件中的insert、delete、update、select元素,就是我们所说的增、删、改、查。
对上面涉及的属性做简要说明:
Id即这个元素唯一编号,必须唯一,不然mybatis找不到要操作的语句
ResultType结果类型,即我们要返回的数据要转换为什么类型
ParameterType传入参数类型
ResultMap结果集map,对于我们实体类中的属性于数据库中的字段设置不一样,我们可以在这里进行配置。
接口
publicinterfaceStudentDao{
publicvoidupdate(Studentstudent);
publicvoiddelete(intid);
接口定义很简单,但是接口中的名字必须与student中的id对应起来,如果接口定义的操作在student.xml中找不到对应id的sql语句,将会报错。
5、Mybatis新特性介绍
1、Mybatis实现了接口绑定,使用更加方便。
在ibatis2.x中我们需要在DAO的实现类中指定具体对应哪个xml映射文件,
而Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
这可以说是Mybatis最重要的改进。
注意:
虽然Mybatis支持在接口中直接使用annotation的配置方式来简化配置,
不过强烈建议仍然使用xml配置的方式。
毕竟annotation的配置方式功能有限且代码入侵性太强。
使用xml配置方式才能体现出Mybatis的优势所在
2、对象关系映射的改进,效率更高
相信很多在使用ibatis2.x的朋友并没有通过ibatis的xml映射文件来实现对象间的关系映射。
其实也确实没有必要那么做,因为ibatis2.x采用的是“嵌套查询”的方式将对象之间的关系通过查询语句的直接拼装来实现,其效果和在DAO或Service中自行封装是一样的。
不过这种方式存在“N+1查询问题”。
概括地讲,N+1查询问题可以是这样引起的:
你执行了一个单独的SQL语句来获取结果列表(就是+1)。
对返回的每条记录,你执行了一个查询语句来为每个加载细节(就是N)。
这个问题会导致成百上千的SQL语句被执行。
这通常不是期望的。
而在Mybatis中,除了兼容ibatis2.x中的“嵌套查询”方式外,还提供了直接“嵌套结果”的方式,其效果相当于直接通过一句sql将查询出的dto对象自动封装成所需的对象。
具体实现方法请自行参考Mybatis官方使用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Mybatis31 实战