IDE用的是Idea,正好头一阵打折买的,熟悉一下,顺便再熟悉一下maven
pom如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.prism</groupId>
<artifactId>prism</artifactId>
<version>0.0.1</version>
<dependencies>
<!--MyBatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
<!--JUnit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!--log4j-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>javax.transaction-api</artifactId>
<version>1.2</version>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-oxm</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
</dependency>
<!--spring-oxm依赖-->
<dependency>
<groupId>org.codehaus.castor</groupId>
<artifactId>castor-xml</artifactId>
<version>1.3.3</version>
</dependency>
<!--spring-json依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.4.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.4.2</version>
</dependency>
<!--Spring-aop 依赖-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.2</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.11</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-framework-bom</artifactId>
<version>4.1.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
其中有一些用不到的
entity user :
public class User {
private Long id;
private String name;
private Integer age;
public User(String name,Integer age){
this.name = name;
this.age = age;
}
public User(Long id,String name,Integer age){
this.id = id;
this.name = name;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return " user : [ id : "+id+" , name : "+name+" , age : "+age+"]";
}
UserMapper 如下:
public interface UserMapper {
User selectUser(Integer id);
void saveUser(User user);
}
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.prism.mapper.UserMapper">
<select id="selectUser" resultType="user">
select * from my_user where id = #{id}
</select>
<!-- keyProperty="id" 和useGeneratedKeys="true"作用为插入后返回自增主键 -->
<!-- 之前没配useGeneratedKeys的时候也成功返回了主键,使用的版本是3.2.1
但是那时候是直接用sqlSessionTemplate调用的namespace.id那种方式的,不知道是不是这个原因-->
<!-- 还有另外一种形式,使用selectKey的方式 -->
<insert id="saveUser" parameterType="user" keyProperty="id" useGeneratedKeys="true">
<!--<selectKey resultType="long" keyProperty="id">
select last_insert_id()
</selectKey>-->
insert into my_user (name,age) values (#{name},#{age})
</insert>
</mapper>
这里需要注意一下,mapper的namespace属性
namespace的值要等于UserMapper接口的全限定类名
我这边是这样的,不确认是不是因为配置有问题,导致的这种结果
接下来就是ApplicationContext了
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
">
<context:component-scan base-package="com.prism.service"></context:component-scan>
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis_test"/>
<property name="username" value="mybatis"/>
<property name="password" value="123456"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- Mapper.xml文件的位置 -->
<property name="mapperLocations">
<array>
<value>classpath:mapper/*.xml</value>
</array>
</property>
<!-- 实体类别名,会将指定包下的实体类映射别名,别名为实体类首字母小写的类名, -->
<!-- 相当于mybatis-config.xml里面的typeAliases -->
<property name="typeAliasesPackage" value="com.prism.entity"/>
</bean>
<!-- 扫描mapper接口文件,与xml映射 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="addToConfig" value="true"/>
<property name="basePackage" value="com.prism.mapper"/>
</bean>
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" scope="prototype">
<constructor-arg index="0" ref="sqlSessionFactory"/>
</bean>
</beans>
UserService如下:
@Component
public class UserService {
@Autowired
private UserMapper userMapper;
public User selectUser(Integer id){
return userMapper.selectUser(id);
}
public void saveUser(User user){
userMapper.saveUser(user);
}
}
最后就是Junit的Test类了
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class Test {
@Autowired
private UserService userService;
@org.junit.Test
public void testUser(){
System.out.println(userService.selectUser(1).toString());
}
@org.junit.Test
public void testSaveUser(){
User user = new User("oldCat",22);
userService.saveUser(user);
System.out.println(user.toString());
}
}