Sping和MyBatis的整合-程序员宅基地

技术标签: java  数据库  

       作为Bean容器,Sping框架提供了Ioc机制,可以接管所有组件的创建工作进行依赖管理,因而整合的主要工作就是把MyBatis框架使用中涉及的核心组件配置到Sping容器中,交给Sping来创建和管理。

       业务逻辑对象依赖于MyBatis技术实现的Dao对象,核心是获取SqlSession实例。而SqlSession是通过SqlSessionFactoryBen来获取。

    Sping 和MyBatis整合方法:

    在整合是用到MyBatis-Sping-1.2.0jar

      

<!--Mybatis+Spring整合-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.0</version>
</dependency>

 

 

1、采用MapperScannerConfigurer,它将会查找类路径下的映射器并自动将它们创建成MapperFactoryBean。
spring-mybatis.xml:

   例:图书添加。

       建立数据库:

          

 

       创建book实体:

        

private int id;
private String bookname;
private int bookprice;

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getBookname() {
return bookname;
}

public void setBookname(String bookname) {
this.bookname = bookname;
}

public int getBookprice() {
return bookprice;
}

public void setBookprice(int bookprice) {
this.bookprice = bookprice;
}


创建IBookDAO

public interface IBookDAO {
     
public int addbook(book book);
}

创建IBookDAO.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">
<!--映射文件的根节点
namespace
-->
<mapper namespace="cn.happy.day16ssm.dao.IBookDAO">
<insert id="addbook">
insert into bookshop(bookname,bookprice) values(#{bookname},#{bookprice})
</insert>
</mapper>
service层:
IBookService:
public interface IBookService {
     
public int addbook(book book);
}
BookServiceimpl:
public class BookServiceimpl implements IBookService {
     
private IBookDAO dao;

public IBookDAO getDao() {
return dao;
}

public void setDao(IBookDAO dao) {
this.dao = dao;
}

public int addbook(book book) {
return dao.addbook(book);

}
}
JDBC的四大属性:
jdbc.url=jdbc:mysql:///bookshop
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.username=root
jdbc.password=
MyBatis的配置文件:
<?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>
<!--别名的设置-->
<typeAliases>
<package name="cn.happy.day16ssm.entity"></package>
</typeAliases>
<!--管理小配置-->
</configuration>
配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property value="classpath:jdbc.properties" name="location"></property>
</bean>

<!--阿里数据源-->
<!--阿里数据源 不想进入阿里的程序员,不是好厨师-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="${jdbc.url}"></property>
<property name="driverClassName" value="${jdbc.driverClassName}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
</bean>
<!--将Mybatis SqlsessionFactory-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>

<!--bookDAO 根据工厂生成session-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" >
<property name="basePackage" value="cn.happy.day16ssm.dao"></property>
</bean>
<!--4.service-->
<bean id="bookService" class="cn.happy.day16ssm.service.BookServiceimpl">
<property name="dao" ref="IBookDAO"></property>

</bean>

<!--平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<!--注入什么东西 事务对象的来源,一定是Connection -->
<property name="dataSource" ref="dataSource"></property>
</bean>

<!--方式三:Aspectj AOP 方式管理事物-->
<tx:advice id="txadvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="addbook" isolation="DEFAULT" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="mypoint" expression="execution(* *..day16ssm.service.*.*(..))"></aop:pointcut>
<aop:advisor advice-ref="txadvice" pointcut-ref="mypoint"></aop:advisor>
</aop:config>
</beans>

测试类:
public class test16ssm {
     
@Test
public void t01(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContextStockday16ssm.xml");
IBookService service=(IBookService)ac.getBean("bookService");
book book=new book();
book.setBookname("三国演义");
book.setBookprice(200);
service.addbook(book);

}
}
运行结果:

       运行结果:

         

 

 

转载于:https://www.cnblogs.com/lsj0404/p/7704725.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/diaoyuan1316/article/details/101208075

智能推荐

台式机电源选购资料调研+为什么50%的时候负载功率最大+80PLUS的解释_电源负载80-程序员宅基地

文章浏览阅读1.5k次。电压偏移要足够低纹波日系电容/台系电容80 plus(节能转化率,电源转化率)如下单双路12v的方案。选择电源的时候,单路12V方案往往在不错的电源上使用,不用费心思去算CPU、显卡等硬件的供电分配问题,利用率也高;双路12V会在廉价的低端电源上出现,往往是12V1给显卡供电、12V2给CPU供电,分开输出,要自己计算,有一路超过电流限制就会断电保护,这样非常麻烦;CPU和显卡的功耗不..._电源负载80

无法更改列 'xxx',因为它是 'REPLICATED'。_无法更改列 'age',因为它是 'replicated-程序员宅基地

文章浏览阅读2.5k次。当我在更新表的列名称时,遇到报错‘无法更改列 ‘name’,因为它是 ‘REPLICATED’。’ 查看数据库服务器,并无相关的发布和订阅存在。在网上搜索相关错误信息,发现有网友之前同样遇到过这种报错,原因是之前进行过订阅复制,后续删除时没有删除干净,需要使用EXEC SP_REMOVEDBREPLICATION ‘发布数据库名称’来强制删除发布。 在数据库中运行上述语句后..._无法更改列 'age',因为它是 'replicated

ffmpeg视频拼接合成/多YUV拼接合成一个YUV_用ffmpeg合并两段yuv视频-程序员宅基地

文章浏览阅读3.3k次。最近在预研融屏/多画面显示,接触ffmpeg比较多,首先想到的是将多YUV合成一个YUV,然后再渲染显示,立马动手起来。 首先,先从简单的来,选取两个YUV,分辨率分别为480*272、352*288,然后合成目标702*288的YUV,这样是考虑多画面时有不一致的分辨率,把它们弄成统一的分辨率再合成,YUV的格式都是YUV420P采样格式,统一分辨率是352*288。 ..._用ffmpeg合并两段yuv视频

nodejs里的JSON.parse()与JSON.stringify()_node json.parse-程序员宅基地

文章浏览阅读4.7k次,点赞2次,收藏6次。JSON.parse(),-》把json字符串转化成 json对象。JSON.stringify()-》把JSON对象转化成JSON字符串。_node json.parse

超常用的Python代码片段 | 备忘单_from math import inf-程序员宅基地

文章浏览阅读1.3k次。本文作者BisratYalew共享了自己在项目中使用过的Python代码片段,希望能帮到其他开发人员,以减少时间并简化开发流程,该项目内容包含:String、Number、File、Functions、Classes、Date and Time、Regular Expressions、Web Data Handling、Asyncio以及Socket。Python Stringsstrip..._from math import inf

[轻微]WEB服务器启用了OPTIONS方法/如何禁止DELETE,PUT,OPTIONS等协议访问应用程序/tomcat下禁用不安全的http方法...-程序员宅基地

文章浏览阅读791次。使用了360网站安全检测 查到有OPTIONS方法百度了下 https://my.oschina.net/maliang0130/blog/338725找到这个方法奈何http.conf 找不到无论在tomcat目录里还是linux路径下的/usr/etc或者apache2最后通过开源中国找到第一步:修改应用程序的web.xml文件的协议&lt;?xml version="1.0" e...

随便推点

关于ElasticSearch使用Groovy做局部更新出现问题:Variable [new_tag] is not defined._caused_by":{"type":"null_pointer_exception","reaso-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏2次。遇见问题特此记录希望能帮助到看到的人在跟着ElasticSearch权威指南学习过程中依旧发现有些语句是不再支持的在局部更新一节,依照Demo当前的数据索引结果是这样的:{ _index: "website", _type: "blog", _id: "123", _version: 5, found: true, _source: {_caused_by":{"type":"null_pointer_exception","reason":null}}}]},"status":400}

mobasterm登录时出现:access denied_mobaxterm的ssh连接显示access denied-程序员宅基地

文章浏览阅读1w次。https://blog.csdn.net/djshichaoren/article/details/81275141今天用MobaXterm连接阿里云服务器,总是显示Access Denied。一开始以为是22端口没打开,但是检查了安全组以后,发现22端口是默认打开的。使用了密钥发现还是不行。最后发现specify username是服务器的用户名,而不是自己随便命名的,我说咋进去以后只..._mobaxterm的ssh连接显示access denied

宁波CE欧盟认证:️打开欧洲市场的金钥匙_宁波ce认证-程序员宅基地

文章浏览阅读196次。对于宁波的企业来说,获得CE认证不仅是对其产品质量的认可,更是打开欧洲市场的️金钥匙。欧洲,作为世界上最大的经济体之一,拥有庞大的消费市场和高度发达的商业环境。️通过CE认证,宁波的企业可以将自己的产品推向这个广阔的市场,进一步提升品牌知名度和市场占有率。但是,正是因为这种严格的认证制度,使得通过CE认证的产品在市场上更具竞争力,更受消费者的青睐。在这座城市‍‍的众多企业中,有许多正致力于通过欧盟的CE认证,为自己的产品打开欧洲市场的大门。_宁波ce认证

如何通过编程更改Windows 10用户文件夹的名称-程序员宅基地

文章浏览阅读34次。在Windows 10中,用户文件夹是每个用户帐户的主文件存储位置。用户文件夹的默认名称是用户的用户名。但是,有时候我们可能需要通过编程方式更改用户文件夹的名称。本文将介绍如何使用Python编程语言修改Windows 10用户文件夹的名称。此外,我们还需要更新注册表中的文件夹路径,以确保系统能够正确识别更改后的用户文件夹。首先,我们获取当前的用户名和用户文件夹路径。通过上述代码,您可以使用Python编程语言更改Windows 10用户文件夹的名称。函数将新的文件夹重命名为原有的用户名。

鸿蒙应用开发游戏(一)---大鱼吃小鱼(界面部署)_鸿蒙游戏开发教程-程序员宅基地

文章浏览阅读889次,点赞22次,收藏8次。你是否玩过古老而不失优雅的大鱼吃小鱼,小鱼的生存之路何尝不是我们这些打工人的写照,以前想用安卓写的,碰巧鸿蒙它来了,那就边学习边记录吧,这个游戏一共分为6篇,记录了鸿蒙App的第一步创建,申明式UI控件如何使用,简单动画的使用,方法的封装,变量的状态管理,点击事件的分发,页面的生命周期,钩子的使用,一些用法与安卓原生的对比等,也算是一个小完整的项目了。第一篇相对简单,只是简单的布局摆放,用的知识点是Stack布局,State状态管理,Entry入口,Component注解等1、创建项目2、项目结构。

tk.mybatis.mapper.MapperException: 无法获取实体类com.leyou.work.entity.Brand对应的表名!_tk.mybatis.mapper.mapperexception: 无法获取实体类com.ai.a-程序员宅基地

文章浏览阅读2.8k次。完整报错:tk.mybatis.mapper.mapperhelper.EntityHelper.getEntityTable(EntityHelper.java:69) ~[mapper-core-1.1.5.jar:na] at tk.mybatis.mapper.entity.Example.<init>(Example.java:103) ~[mapper-core-1.1..._tk.mybatis.mapper.mapperexception: 无法获取实体类com.ai.ai.pojo.aiapikey对应

推荐文章

热门文章

相关标签