MyBatis3和Spring4基于接口编程的例子

来源:互联网 发布:少女前线枪娘数据大全 编辑:程序博客网 时间:2024/06/08 09:44

本例子使用的数据库为PostgreSQL。
项目源代码下载地址为http://download.csdn.net/detail/wu_boy/9275509

Maven创建Web项目,架构如下图所示
项目架构图1
项目架构图2
Maven引用如下图所示
这里写图片描述
Spring配置文件applicationContext.xml如下

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:aop="http://www.springframework.org/schema/aop"    xmlns:tx="http://www.springframework.org/schema/tx"    xsi:schemaLocation="http://www.springframework.org/schema/beans     http://www.springframework.org/schema/beans/spring-beans-4.1.xsd     http://www.springframework.org/schema/context     http://www.springframework.org/schema/context/spring-context-4.1.xsd     http://www.springframework.org/schema/aop     http://www.springframework.org/schema/aop/spring-aop-4.1.xsd     http://www.springframework.org/schema/tx     http://www.springframework.org/schema/tx/spring-tx-4.1.xsd">    <description>Spring公共配置文件 </description>    <context:component-scan base-package="com.wu.mybatis" />    <context:annotation-config/>    <context:property-placeholder location="classpath:application.properties" />    <bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"          destroy-method="close" lazy-init="false">          <property name="driverClass" value="${jdbc.driver}" />          <property name="jdbcUrl" value="${jdbc.url}" />          <property name="username" value="${jdbc.username}" />          <property name="password" value="${jdbc.password}" />      </bean>    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">       <property name="dataSource" ref="dataSource"/>       <property name="configLocation">          <value>classpath:mybatis-config.xml</value>       </property>    </bean>    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property name="dataSource" ref="dataSource" />    </bean>    <tx:annotation-driven transaction-manager="transactionManager"/>    <!-- scan for mappers and let them be autowired -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <property name="basePackage" value="com.wu.mybatis" />        <property name="annotationClass" value="com.wu.mybatis.dao.Mapper"></property>    </bean></beans>

application.properties文件如下

jdbc.driver=org.postgresql.Driverjdbc.url=jdbc:postgresql://127.0.0.1:5432/postgresjdbc.username=postgresjdbc.password=postgres

dao包中的两个接口如下

package com.wu.mybatis.dao;import java.io.Serializable;public interface BaseDao<T, PK extends Serializable> {    int insert(T o);    T selectById(PK id);}
package com.wu.mybatis.dao;public @interface Mapper {}

user包中,User类如下

package com.wu.mybatis.user;public class User {    private Integer id;    private String userName;    private String password;    //此处省略了get/set方法,请自行补全

UserMapper接口如下

package com.wu.mybatis.user;import com.wu.mybatis.dao.BaseDao;import com.wu.mybatis.dao.Mapper;@Mapperpublic interface UserMapper extends BaseDao<User, Integer>{}

UserService接口如下

package com.wu.mybatis.user;public interface UserService {    int save(User o);    User findById(Integer id);}

UserServiceImpl类如下

package com.wu.mybatis.user;import javax.annotation.Resource;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;@Service@Transactionalpublic class UserServiceImpl implements UserService{    @Resource      private UserMapper userMaper;    @Override    public int save(User o) {        return userMaper.insert(o);    }    @Override    public User findById(Integer id) {        return userMaper.selectById(id);    }}

UserMapper.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"><mapper namespace="com.wu.mybatis.user.UserMapper">    <insert id="insert" parameterType="user">        insert into user_mybatis (username,password) values         (#{userName,jdbcType=VARCHAR},#{password,jdbcType=VARCHAR})    </insert>    <select id="selectById" parameterType="int" resultType="user">        select id,username,password from user_mybatis where id=#{id}    </select></mapper>

mybatis-config.xml文件配置如下

<?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>    <settings>        <!-- changes from the defaults for testing -->        <setting name="cacheEnabled" value="false" />        <setting name="useGeneratedKeys" value="true" />        <setting name="defaultExecutorType" value="REUSE" />    </settings>    <typeAliases>        <typeAlias type="com.wu.mybatis.user.User" alias="user"/>    </typeAliases></configuration>

web.xml文件配置如下

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee"   xmlns:web="http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"  version="3.1">      <display-name>mybatis</display-name>    <listener>        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    </listener>    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value>    </context-param></web-app>

建表语句如下

CREATE TABLE "public"."user_mybatis" ("id" int4 DEFAULT nextval('user_mybatis_id_seq'::regclass) NOT NULL,"username" varchar(32) COLLATE "default","password" varchar(32) COLLATE "default")WITH (OIDS=FALSE);ALTER TABLE "public"."user_mybatis" ADD PRIMARY KEY ("id");

测试类ServiceTest如下

package com.wu.mybatis.test;import org.junit.BeforeClass;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import com.wu.mybatis.user.User;import com.wu.mybatis.user.UserService;public class ServiceTest {private static ApplicationContext act = null;    @BeforeClass    public static void setUpBeforeClass() throws Exception {        act = new ClassPathXmlApplicationContext("applicationContext.xml");    }    @Test    public void test() throws Exception{        UserService service=(UserService)act.getBean("userServiceImpl");        User o = new User();        o.setUserName("admin1");        o.setPassword("pass1");        service.save(o);    }}

MyBatis和Spring基于接口编程,核心dao只有一个,即该例中的Dao,里面可以写一些通用接口。然后面向对象编程中,可以在实体Mapper中扩展自用接口。service中调用dao层接口时,由MyBatis代理实现。
以上是一个简单例子,代码都贴出来了,比较详细,有些地方可能有些简陋,也可作为MyBatis入门例子,仅供参考。

项目源代码下载地址为http://download.csdn.net/detail/wu_boy/9275509

0 0