MyBatis学习七:spring和MyBatis整合、逆向工程

来源:互联网 发布:mac webpack 编辑:程序博客网 时间:2024/05/18 02:21

一、整合思路

需要spring通过单例方式管理SqlSessionFactory。

spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession(spring和mybatis整合自动完成)。

持久层的mapper都需要由spring进行管理。

二、整合之后结构图


三、配置SqlSessionFactory和数据源

在applicationContext.xml配置SqlSessionFactory和数据源。

<!—加载配置文件 --><context:property-placeholder location=”classpath:db.properties”/><!—数据源,使用dbcp --><bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource” destroy-method=”close”><property name=”driverClassName” value=”${jdbc.driver}”//继续配置url、username、password、maxActive、maxIdle等</bean><!-- sqlSessionFactory --><bean id=”sqlSessionFactory” class=”org.mybatis.spring.SqlSessionFactoryBean”><!—加载mybatis的配置文件 --><property name=”configLocation” value=”mybatis/SqlMapConfig.xml”/><!—数据源 --><property name=”datasource” ref=” datasource”/></bean>

假设已经写好pojo、映射文件(原始dao方式名称为User.xml;代理开发方式为xxMapper.xml)。、在SQLConfigMap.xml中加载映射文件,然后接着开发:

四、原始dao方式

1、dao实现类继承SqlSessionDaoSupport

dao接口实现类需要注入SqlSessionFactory,通过spring进行注入。两种方式:自动注入或者声明配置方式;这里使用声明配置方式,配置dao的bean:让UserDaoImpl实现类继承SqlSessionDaoSupport。

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao{@overridepublic User findUserById(int id) throws Exception{//继承SqlSessionDaoSupport,通过this.getSqlSession()得到sqlSessionSqlSession sqlSession = this.getSqlSession();User user = sqlSession.selectOne(“test.findUserById”, id);return user;<span style="white-space:pre"></span>}}
2、配置dao

在applicationContext.xml中配置dao。

<!—原始dao接口 --><bean id=”userDao” class=”cn.itcast.ssm.dao.UserDaoImpl”><property name=”sqlSessionFactory” ref=”sqlSessionFactory”/></bean>
3、测试
public class UserDaoImplTest{private ApplicationContext applicationContext;//在setUp这个方法得到spring容器@Beforepublic void setUp() throws Exception{applicationContext = new ClassPathXmlApplicationContext(“classpath:spring/applicationContext”)<span style="white-space:pre"></span>}@Testpublic void testFindUserById() throws Exception{UserDao userDao = (UserDao)applicationContext.getBean(“userDao”);User user = userDao.findUserById(1);System.out.println(user);<span style="white-space:pre"></span>}}

五、mapper代理开发方式

1、mapper.xml和mapper.java

2、通过MapperFactoryBean创建代理对象
<!—mapper配置MapperFactoryBean:根据mapper接口生成代理对象 --><bean id=”userMapper” class=”org.mybatis.spring.mapper.MapperFactoryBean”><!--mapperInterface指定mapper接口 --><property name=”mapperInterface” value=”cn.itcast.ssm.mapper.UserMapper”/><property name=”sqlSessionFactory” ref=”sqlSessionFactory”/></bean>

此方法问题:需要针对每个mapper进行配置,麻烦。

3、通过MapperScannerConfigurer进行mapper扫描

<!—加载映射文件 --><mappers><mapper resource=”sqlmap/User.xml”/><!—批量加载mapper 指定mapper接口的包名,mybatis自动扫描包下所有mapper接口进行加载。遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名保持一致,且在一个目录下。上边规范的前提是:使用 的是mapper代理方法。和spring整合后,使用mapper扫描器,mybatis的配置文件中就不需要配置了<!-- <package name=”cn.itcast.ssm.mapper”/> -->--></mappers>
<!—mapper批量扫描,从mapper包中扫描出mapper接口,自动创建代理对象并且在spring容器中注册。遵循规范:将mapper.java和mapper.xml映射文件名称保持一致,且在一个目录中。自动扫描出来的mapper的bean的id为mapper类名(首字母小写) --><bean class=”org.mybatis.spring.mapper.MapperScannerConfigurer”><!—指定扫描的包名。如果扫描多个包,每个包中间使用半角逗号分隔 --><property name=”basePackage” value=”cn.itcast.ssm.mapper”/><property name=”sqlSessionFactoryBeanName” value=”sqlSessionFactory”/></bean>

4、测试代码
@Testpublic void testFindUserById() throws Exceptino{UserMapper userMapper = (userMapper)applicationContext.getBean(“userMapper”);User user = userMapper.findUserById(1);System.out.println(user);}

六、逆向工程

mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java、mapper.xml、po等等)

企业实际开发汇总,常用的逆向工程方式:由数据库的表生成java代码。

 













0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 脸又红又痒又烫怎么办 满脸痘痘怎么办全部都是红的 身上起大片扁疙瘩很痒怎么办 我急用钱借钱又借不到怎么办 小孩蛀牙牙疼怎么办教你立刻止疼 牙齿里面长了个小牙齿怎么办 2岁宝宝又吐又拉怎么办 u盘坏了怎么办没反应了 怀孕了不知道孩子是谁的怎么办 怀孕八个月耻骨疼的厉害怎么办 没感情了这段婚姻该怎么办 1岁半宝宝o型腿怎么办 4s店没按时交车怎么办 几天几夜睡不着觉没有睡意怎么办 辣的吃多了胃疼怎么办 喉咙痛怎么办有最好即简单好得快 减肥过后皮肤留下的肥胖纹怎么办 用了完美玛丽艳脸上长痘痘怎么办 腰疼怎么办8方法解决腰疼 红米3x开不了机怎么办 苹果手机忘记了锁屏密码怎么办 小米5的4g网速慢怎么办 红米4a卡机了怎么办 信而富逾期3个月怎么办 苹果6锁屏密码忘了怎么办 孕8个月咳嗽有痰怎么办 微信红包输了6万怎么办 红米3s开不了机怎么办 核载5人载了6人怎么办 我欠支付宝2万6怎么办 我47岁这个月经不来怎么办 两个月不来月经了也没怀孕怎么办 婴儿不吃奶粉母乳又不够吃怎么办 怀孕39周了还没反应怎么办 脸过敏了又红又痒怎么办 刚开的淘宝店没生意怎么办 我22岁长得显老怎么办 卡的钱被qq转走怎么办 招行u盾密码忘了怎么办 孩子上五年级了成绩非常差怎么办 红米3s开不开机怎么办