今天初次接触了MyBatis这种半ORM框架,在学习之中有很多的体会,于是乎写下这篇博客,方便自己日后复习,有需要的同学也可以学习学习,互帮互助。所有的项目文件已经上传,有需要的可以下载。
和所有的框架一样,在项目之中使用一个框架的第一步大概就是导入jar 包。MyBatis是个轻量级的框架,需要的jar包也很少。在本工程之中与MyBatis相关的包只有三个mybatis-3.2.7.jar 、mybatis-spring-1.2.2.jar、mysql-connector-java-5.1.7-bin.jar。第一个包是MyBatis的核心包,第二个包是Mybatis和Spring配合使用的时候需要的包,第三个是链接mysql数据库的驱动包。
下面开始来配置,首先先配置Spring。在web.xml之中配置好Spring的核心,dispatcherServlet ,如下
<span style="font-size:18px;"> <!-- SpringMVC 配置 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
</span>
servlet的配置大家应该耳熟能详,这也不是本文的中点,因此不做更多的介绍。
接着在src目录下新建springmvc.xml,这个是SpringMVC的核心配置文件。与Mybatis相关的所有配置先从这个文件开始。首先是SpringMVC的注解,在这个懒人盛行的年代好像不会注解怎么都说不过去。注解方式的配置如下,缺一不可。
<!-- 可以扫描controller、service、...
这里让扫描controller,指定controller的包
-->
<context:component-scan base-package="com.neusoft.*"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
这里配置的注解使用了组件扫描,扫描com.neusoft下所有的包,如果想扫描别的包,也可以稍作修改。
接着我们来配置sqlMapConfig.xml 这个文件可以配置的信息有
- properties(属性)
- settings(全局配置参数)
- typeAiases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境集合属性对象)mappers(映射器)
- environment(环境子属性对象)
- transactionManager(事物管理)
- datesource(数据源
- mappers(映射器)
由于本工程使用了SpringMVC,因此一些配置可以省略,在这个配置文件之中只设置了类型别名typeAiases,具体如下,这个配置文件的详情在另外一篇博客之中会详细解析。
<configuration>
<!-- 全局setting配置,根据需要添加 -->
<!-- 配置别名 -->
<typeAliases>
<!-- 批量扫描别名 -->
<package name="com.neusoft.po"/>
</typeAliases>
<!-- 配置mapper
由于使用spring和mybatis的整合包进行mapper扫描,这里不需要配置了。
必须遵循:mapper.xml和mapper.java文件同名且在一个目录
-->
<!-- <mappers>
</mappers> -->
</configuration>
接着,我们再在springmvc.xml之中配置数据库配置文件以及连接池信息:
db.property文件的配置如下,可以根据自己的数据库进行更改
<span style="white-space:pre"> </span>jdbc.driver=com.mysql.jdbc.Driver
<span style="white-space:pre"> </span>jdbc.url=jdbc\:mysql\://localhost\:3306/neusoft
<span style="white-space:pre"> </span>jdbc.username=root
<span style="white-space:pre"> </span>jdbc.password=123
数据库配置文件db.property放置在src目录下,当然,如果放在与src目录同级下的源文件夹之中也可以,因为所有的源文件夹在被编译后都会同意被安放在classpath之下。
<!-- 加载db.properties文件中的内容,db.properties文件中key命名要有一定的特殊规则 -->
<context:property-placeholder location="classpath:db.properties" />
<!-- 配置数据源 ,dbcp -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"><pre name="code" class="html"><!-- mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
<property name="basePackage" value="com.neusoft.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
<property name="driverClassName" value="${jdbc.driver}" /><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="maxActive" value="30" /><property name="maxIdle" value="5" /></bean> 接着在这个文件之中配置sqlSessionFactory 以及它的属性
<!-- sqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 数据库连接池 -->
<property name="dataSource" ref="dataSource" />
<!-- 加载mybatis的全局配置文件 -->
<property name="configLocation" value="classpath:sqlMapConfig.xml" />
</bean>
接着配置扫描器
<!-- mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描包路径,如果需要扫描多个包,中间使用半角逗号隔开 -->
<property name="basePackage" value="com.neusoft.mapper"></property>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
到这里为止,我们的MyBatis+SpringMVC就基本配置完成了,但是,并没什么卵用,仅仅是搭好了框架而已,下面,来开始正式使用这两个框架吧。
先在com.neusoft.po 下创建一个简单的java对象
public class User {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
首先,先在com.neusoft.mapper下创建一个接口UserMapper,我们正式通过这个接口里面的抽象方法操作数据库。
public interface UserMapper {
/**
* 接口的方法在UserMapper.xml之中配置
* @param user
*/
public void insertForUser(User user);
}
接着
在同一个包下面创建UserMapper.xml,这个xml文件配置了我们接口之中的方法,我们所有的sql语句都写在**mapper.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.neusoft.mapper.UserMapper" >
<!-- id 就是接口的方法名 parameterType 是参数的类型-->
<insert id="insertForUser" parameterType="com.neusoft.po.User">
insert into neusoft_user(name) values(#{name})
</insert>
</mapper>
接着,配置我们的处理器,在com.neusoft.controller 包下创建
@Controller
public class UserController {
//自动注入
@Autowired
UserMapper userMapper ;
@RequestMapping("/add")
public String add(User user){
userMapper.insertForUser(user);
System.out.println("这是我的add");
return "success.jsp";
}
}
这里都是用的注解的方式,配置了一个控制器,可以通过add.action 调用这个控制器。自动注入了一个UserMapper userMapper ,比较省心,如果对于注解不清楚的客官就要好好学习了。到这里,一个简单的例子就完成了,我们可以在浏览器中试试。访问,截图如下: