之前做好了SpringMvc的框架,直接用的jdbc连接数据库不是很方便,这里搭建下Mybatis,hibernate我没用过,Mybatis也不用自己写sql.xml,可以用插件自动生成,方法如下:
首先要在Eclipse安装Mybatis Generator 点击help--install new software 输入地址如下
http://mybatis.googlecode.com/svn/sub-projects/generator/trunk/eclipse/UpdateSite/
安装完成后可能要重启Eclipse,然后我们可以随便找个地方,就在test包下吧,右击,新建,Other,找到如下图
选择这个Generator,Next确定名称位置后直接完成,会自动生成一个generatorConfig.xml文件,打开后只是一个填写的框架,我已经填好了,并解释如下
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration >
<!-- 引入连接数据库jar包的位置 -->
<classPathEntry
location="E:/mysql-connector-java-5.0.8-bin.jar" />
<context id="context1" >
<!-- 连接数据库的配置 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/dbmy?characterEncoding=utf-8"
userId="root" password="" />
<!-- 自动生成实体类的位置 -->
<javaModelGenerator targetPackage="com.springMvc.dao.entity" targetProject="springMVC" />
<!-- 自动生成Sql mapper的位置 -->
<sqlMapGenerator targetPackage="sqlMap" targetProject="springMVC" />
<!-- 自动生成Manager的位置 -->
<javaClientGenerator targetPackage="com.springMvc.dao.manager" targetProject="springMVC" type="XMLMAPPER" />
<!-- 要操作的数据库表 -->
<table tableName="account_info" domainObjectName="AccountInfo">
<!-- 主键 -->
<generatedKey column="id" sqlStatement="MySql" identity="true" />
</table>
<!-- 要操作的数据库表 -->
<table tableName="account_type" domainObjectName="AccountType">
<!-- 主键 -->
<generatedKey column="type_id" sqlStatement="MySql" identity="true" />
</table>
</context>
</generatorConfiguration>
我们可以看到,这个文件可以连接到数据库,根据表结构自动逆向工程生成entity实体类,manager,还有sqlmap.非常简单。只要把位置确定好就行了,这里一定要注意entity的位置,因为sql.xml文件里会用到上面的路径,如果你位置没写对,生成后又调换entity的位置,那sql.xml文件能改死你。
然后确认无误后(这时我们可以先删掉之前配spring时写好的entity和manager了)右击generatorConfig.xml,点击如下
就自动生成了,如图
可以看到entity,manager还有sqlMap下都是自动生成的,然后sqlMap可以直接剪切掉放到resource包下,看着舒服点service报错是因为我们删掉了之前的dao里的东西。至于generatorConfig.xml就可以卸磨杀驴直接删掉了,碍事,如果想留着以后数据库会更改,这个东西其实完全可以另外新建个项目把这个generatorConfig.xml放到别的项目去,只要配置好路径在别的项目也能生成到本项目。留在本项目看着还碍事。然后我们要细看一个这几个自动生成的东西,实体类就不用说了,就是按照数据库的字段,数据类型生成的。然后每个对应了一个example是用来封装查询条件的。看看代码就明白了,manager提供了基本的增删改查的接口,接口的命名直接对应到了sqlMap下的sql.xml文件。都是针对单表查询的。如果联合查询怎么办呢,自己在再mapper里添加就行了,自动生成这些已经很省力了。
然后service还报错呢,删了原来的东西,新的怎么给service呢。
只需要继续在application.xml继续如下配置就可以了
<!-- sql的位置 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="mapperLocations" value="classpath:sqlMap/*.xml" />
</bean>
<!-- 装配上mapper接口 -->
<bean id="accountInfoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface"
value="com.springMvc.dao.manager.AccountInfoMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
<bean id="accountTypeMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface"
value="com.springMvc.dao.manager.AccountTypeMapper" />
<property name="sqlSessionFactory" ref="sqlSessionFactory" />
</bean>
然后service哩就可以用了,但我们记得查询可用类型那是个自身的联合查询。自动生成的sql没有,我们就自定义一个好了。mapper添加方法
/**
* 自定义查询可用类型
*/
List<TypeInfo> selectLastTypes();
同时对应的sql里以selectLastTypes为id添加sql
<!-- 自定义查询可用类型 -->
<select id="selectLastTypes" resultType="com.springMvc.model.TypeInfo">
selecttype_idastype_id,
type_nameastype_name
fromaccount_type
wheretype_idnotin
(selectdistinct type_parent from account_type)
</select>
service做如下修改
package com.springMvc.service.Impl;
import java.util.List;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springMvc.dao.manager.AccountTypeMapper;
import com.springMvc.model.TypeInfo;
import com.springMvc.service.TypeService;
@Service
public class TypeServiceImpl implements TypeService{
//logger
private final static Logger logger = Logger.getLogger(TypeServiceImpl.class);
//@Autowired//自动装配dao bean
//private TypeManager typeManager;
@Autowired
private AccountTypeMapper accountTypeMapper;
@Override
public List<TypeInfo> selectAllTypes() {
logger.info("----------------调取可用类型,Service层--!");
return accountTypeMapper.selectLastTypes();
}
}
package com.springMvc.service.Impl;
import java.sql.Date;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.springMvc.dao.entity.AccountInfo;
import com.springMvc.dao.manager.AccountInfoMapper;
import com.springMvc.service.AccountService;
@Service //标注为服务层的一个service
public class AccountServiceImpl implements AccountService{
//logger
private final static Logger logger = Logger.getLogger(AccountServiceImpl.class);
//@Autowired//自动装配dao bean
//private AccountManager accountManager;
@Autowired
private AccountInfoMapper accountInfoMapper;
@Override
public void insertAccout(Date acc_time,Integer acc_jine,Integer acc_shouzhi,Integer acc_type,String acc_beizhu) {
logger.info("----------------插入账目进入Service层--!");
//Account ac = new Account();
AccountInfo ac = new AccountInfo();
ac.setAccTime(acc_time);
ac.setAccJine(acc_jine);
ac.setAccShouzhi(acc_shouzhi==1?true:false);
ac.setAccType(acc_type);
ac.setAccBeizhu(acc_beizhu);
//accountManager.insertAccount(ac);
accountInfoMapper.insert(ac);
}
}
controller不用动,就OK了,再tomcat run一下,是不是很好用。然后这里example一直没用上,简单介绍个例子,比如我要查询某天的支出账目,条件是dateX,收支类型是支出false.就按如下:
AccountInfoExample ex = new AccountInfoExample();//封装条件
ex.createCriteria().andAccTimeEqualTo(dateX).andAccShouzhiEqualTo(false);
List<AccountInfo> list = accountInfoMapper.selectByExample(ex);
返回的list就是我们想要的结果了,看明白了吗,关于spring和mybatis还有很多东西,这里就简单配下算个小例子分享给大家。另外分享一些java常用工具jar包下载地址
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com