create table USER_INFO ( ID VARCHAR2(10) not null, USER_NAME VARCHAR2(50) not null, USER_AGE VARCHAR2(100) not null, USER_ADD VARCHAR2(200) )表创建好之后便创建其映射类“UserInfo”,位于包“vo”中
public class UserInfo { private String id; private String userName; private String userAge; private String userAdd; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getUserAge() { return userAge; } public void setUserAge(String userAge) { this.userAge = userAge; } public String getUserAdd() { return userAdd; } public void setUserAdd(String userAdd) { this.userAdd = userAdd; } }映射类创建好之后便创建MyBatis映射文件(即Mapper文件),位于conf的mapper包中,文件内容如下:
Mapper文件中的resultMap用于配置表中字段与映射类属性间的映射关系,其中的"type"表示映射类的完整类名,但此处没有使用"vo.UserInfo"的原因是在MyBatis配置文件中配置了其别名。
如果不与Spring进行整合的话,此配置文件还需要配置数据源信息,与Spring整合之后数据源就配置在Spring配置文件中,只需要配置映射文件的路径就可以了。
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl jdbc.username=des jdbc.password=des接下来创建Spring配置文件“applicationContext.xml”,此时配置文件是空的,文件内容如下:
然后便可以在Spring配置文件中引入jdbc配置文件了,代码如下所示:
然后在Spring配置文件配置数据源Bean,代码如下:
在Mybatis中对数据库的所有操作都是基于一个SqlSession的,而SqlSession是由SqlSessionFactory来产生的,SqlSessionFactory又是由SqlSessionFactoryBuilder来生成的。但是Mybatis-Spring给我们封装了一个SqlSessionFactoryBean,在这个bean里面还是通过SqlSessionFactoryBuilder来建立对应的SqlSessionFactory,进而获取到对应的SqlSession。通过SqlSessionFactoryBean我们可以通过对其指定一些属性来提供Mybatis的一些配置信息。所以接下来我们需要在Spring的applicationContext配置文件中定义一个SqlSessionFactoryBean。
在定义SqlSessionFactoryBean的时候,dataSource属性是必须指定的,它表示用于连接数据库的数据源。当然,我们也可以指定一些其他的属性,下面简单列举几个:
l plugins:数组类型,用来指定Mybatis的Interceptor。com.tiantian.mybatis.model.Blog com.tiantian.mybatis.model.Comment
这样我们就可以通过Spring的依赖注入在Dao中直接使用SqlSessionTemplate来编程了。
在完成MyBatis与Spring的基本配置之后便可以编写Dao层、Service层代码。首先在MyBatis的Mapper文件中编写SQL语句,内容如下:
此SQL表示根据用户ID查询用户信息,"id"用于唯一表示此SQL语句,"parameterType"表示传入参数类型,"resultMap"表示返回映射类要与映射关系元素的"id"保持一致。此时完整的Mapper文件内容如下(不包括文件头):
然后创建接口IUserDao,位于包"dao"中,代码如下:
public interface IUserDao {\ /** * 根据用户ID查询用户信息 * @param id * @return */ public UserInfo findUserById(String id); }然后创建此接口的实现类"UserDaoImpl",位于包"dao.impl"中,代码如下:
public class UserDaoImpl implements IUserDao { private SqlSessionTemplate sessionTemplate; public void setSessionTemplate(SqlSessionTemplate sessionTemplate) { this.sessionTemplate = sessionTemplate; } @Override public UserInfo findUserById(String id) { UserInfo user = sessionTemplate.selectOne("UserInfoMapper.selectUserByID", "12"); return user; } }然后在Spring配置文件中注册此实现类的Bean,并为其注入"sessionTemplate"的属性值,代码如下:
最后一步便是编写Service代码,由于此案例没有使用前端页面调用的方式,所以就在Service中通过main方法模拟对Dao层的调用,否则还应有Service层接口、controller层编码以及前端页面。Service类"UserService "位于包"service"中
public class UserService { //Spring容器 private static ApplicationContext ctx; private static IUserDao userDao; static { // 在类路径下寻找Spring配置文件 ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); } public static void main(String[] args) { userDao = (IUserDao)ctx.getBean("userDao"); UserInfo user = userDao.findUserById("12"); System.out.println(user.getId()); System.out.println(user.getUserName()); } }上述类中有两个属性,"ctx"就是Spring容器,在main方法中先通过其给属性"userDao"赋值,然后调用其方法"findUserById"通过用户ID查询用户信息。