Spring+Struts 2+MyBatis基础CRUD

来源:互联网 发布:企业所得税申报软件 编辑:程序博客网 时间:2024/06/12 08:53

     因为课程到了MyBatis,所以写个详细的过程给学生看,请注意,这里是,给学生看。


     首先,用到的IDE是MyEclipse 8.5/8.6

     新建一个项目,起名为ssm,这里第二个s为Struts 2,后面我们会换成SpringMVC,课程重点是MyBatis。

     然后右击项目,加入Struts2支持jar文件,记得加入Struts 2支持Spring的jar文件。Struts-core和Struts-Spring

     接下来添加Spring的支持jar文件,我们初期用到的就5个,Core,Aop,Anotation,Jdbc,Web。

     最后我们添加MyBatis的支持jar文件,Mybatis和Mybatis-Spring,复制MyBatis的配置文件到src目录下。


applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"default-autowire="byName"><bean id="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource" ><property name="driverClassName"value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/test"></property><property name="username" value="root"/><property name="password" value="123"/></bean><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="configLocation" value="classpath:MyBatisConfig.xml"/></bean><bean id="crudAction" class="com.action.CrudAction"/><bean id="crudService" class="com.service.CrudService"/><bean id="crudDao" class="com.dao.CrudDao"/><bean id="user" class="com.pojo.User"/></beans>
     设置好dataSource和sqlSessionFactory,注意,这里和Hibernate有所区别,Hibernate的工厂类为sessionFactory,而MyBatis为sqlSessionFactory,设置好数据库的用户名与密码。还有一点,我这里用的是byName自动注入,所以在配置的bean下面我没有写property属性。


struts.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.objectFactory" value="spring"/><constant name="struts.devMode" value="true"/><constant name="struts.i18n.encoding" value="UTF-8"/><package name="mybatis" extends="struts-default"><action name="Crud_*" class="com.action.CrudAction" method="{1}"><interceptor-ref name="modelDriven"/><interceptor-ref name="defaultStack"/><result name="show_jsp">/show.jsp</result><result name="add_jsp">/add.jsp</result><result name="update_jsp" >/update.jsp</result><result name="redirect" type="redirect">/Crud_query</result></action></package></struts>    


MyBatisConfig.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><mappers>    <mapper resource="com/pojo/userMapper.xml"/>  </mappers></configuration>


web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>  <filter>  <filter-name>struts2</filter-name>  <filter-class>  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  </filter-class>  </filter>  <filter-mapping>  <filter-name>struts2</filter-name>  <url-pattern>/*</url-pattern>  </filter-mapping></web-app>

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">        <!-- namespace 命名空间 --><mapper namespace="com.pojo.user"><!-- select标签,表明要进行查询操作,在整个命名空间呢,id应该是唯一的, resultType属性定义查询后的结果类型,这里我们将查询结果定义为User。 --><select id="query" resultType="com.pojo.User" >select * from user</select><!-- insert标签,表明要进行添加操作,parameterType属性定义传入的参数类型,这里我们将信息封装到了User实体类里面,用#可以将其取到,类似于OGNL的用法--><insert id="insert" parameterType="com.pojo.User">insert into user values(null,#{name},#{password})</insert><!-- delete标签表明要进行删除操作 --><!-- 如果只传一个id进来,这里的应该就是parameterType="java.lang.Integer" --><delete id="delete" parameterType="com.pojo.User">delete from user where id=#{id}</delete><!--更新操作前拿到要更新的具体数据,这里的参数类型和结果类型都必须要定义好  --><select id="selectOne" parameterType="com.pojo.User" resultType="com.pojo.User">select * from user where id=#{id}</select><!-- update标签表明要进行更新操作 --><update id="update" parameterType="com.pojo.User">update user set name=#{name},password=#{password} where id=#{id}</update></mapper>


Dao类代码如下

<span style="font-size:18px;">package com.dao;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import com.pojo.User;public class CrudDao {private SqlSessionFactory sqlSessionFactory;public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}public List<User> query() {SqlSession session=sqlSessionFactory.openSession();//获取sqlSessionList<User> list=session.selectList("com.pojo.user.query");//执行查询结果session.close();//关闭sessionreturn list;}public void add(User user) {SqlSession session=sqlSessionFactory.openSession();//在这里我们先不配置事务session.insert("com.pojo.user.insert",user);session.close();}public void delete(User user) {SqlSession session=sqlSessionFactory.openSession();session.delete("com.pojo.user.delete", user);//这里只传一个id也是可以的session.close();}public User selectOne(User user) {SqlSession session=sqlSessionFactory.openSession();User user1=session.selectOne("com.pojo.user.selectOne", user);session.close();return user1;}public void update(User user) {SqlSession session=sqlSessionFactory.openSession();session.update("com.pojo.user.update", user);session.close();}}</span>


     以上就是MyBatis基础的CRUD,相比较于Hibernate,MyBatis比较容易上手,但是后面对于复杂查询的操作比较考验SQL语句的学习,所以大家还得花些时间在SQL语句上。


     接下来说下MyBatis的注解配置

     注解配置和xml文件配置其实简单看起来还是很相近的,但是官方文档说,要想发挥MyBatis的所有威力,还是得用运用xml文件配置的方式,注解配置对一些复杂的SQL操作有一定的局限性。

     运用注解后,就不再使用userMapper.xml文件,而是新建一个接口,MyBatisCofig.xml文件也相应改变。

UserI 

package com.pojo;import java.util.List;import org.apache.ibatis.annotations.Delete;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import org.apache.ibatis.annotations.Update;public interface UserI {@Select("select * from user")public List<User> query();@Insert("insert into user values(null,#{name},#{password})")public void insert(User user);@Delete("delete from user where id=#{id}")public void delete(User user);@Select("select * from user where id=#{id}")public User SelectOne(User user);@Update("update user set name=#{name},password=#{password} where id=#{id}")public void update(User user);}

     接口的每一个方法对应一个注解,而注解内写了对应的SQL语句,当调用方法时,就会向数据库发送注解中的SQL语句

     MyBatisCofig.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><mappers><!--      <mapper resource="com/pojo/userMapper.xml"/>-->    <mapper class="com.pojo.UserI"/>  </mappers></configuration>


DAO类也相应有所变化。

CrudDao

package com.dao;import java.util.List;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import com.pojo.User;import com.pojo.UserI;public class CrudDao {private SqlSessionFactory sqlSessionFactory;public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}public UserI getUserI(){SqlSession session=sqlSessionFactory.openSession();UserI userI=session.getMapper(UserI.class);return userI;}public List<User> query() {UserI userI=this.getUserI();List<User> list=userI.query();return list;}public void add(User user) {UserI userI=this.getUserI();userI.insert(user);}public void delete(User user) {UserI userI=this.getUserI();userI.delete(user);}public User selectOne(User user) {UserI userI=this.getUserI();User user1=userI.SelectOne(user);return user1;}public void update(User user) {UserI userI=this.getUserI();userI.update(user);}}
     得到sqlSession后,调用sqlSession的getMapper()方法,类似于得到一个接口的实例对象,我将这两部抽成了一个getUserI()方法,然后通过这个对象调用相应的方法执行CRUD操作。

     这就是MyBatis注解配置的简单应用,如果业务逻辑简单可以适当用下,但是复杂的项目不推荐用注解的方式。










1 0