Java知识总结---MVC模式解析之MyBatis(四)

在上一篇的文章里,简单介绍了一些SpringMVC的一些简单使用方法。今天就来看看Mybatis。现在流行的Hibernate、Mybatis都是比较常见的ORM框架。什么是ORM呢,就是 Object Relational Mapping,对象关系映射,通俗点说,就是把对象映射成sql语句,在操作的时候,直接操作对象就可以了。了解过Hibernate的都知道,在做CRUD的时候,直接操作一个Model,即可操作数据库,对于一些特殊的情况,我们还可以使用hql,虽然这样很方便,但是在一些特殊的情况下,往往会有比较复杂的sql,虽然用Hibernate也能够解决,但却并不怎么容易。而Mybatis呢,了解过的都知道,它还是通过sql语句来操作数据库,只是把sql都写在配置文件中,并且对于参数,返回结果都能用对象来操作。这样不仅能解决一些复杂sql的问题,对代码层面来说,只是调用insert,select这些方法,而不需要显示的创建connection,statement,resultset等等。下面呢,我们就来看看如何在项目中使用Mybatis。

我们仍然以之前文章里搭建的项目为基础,来看看Mybatis的配置。

首先,我们先看看mybatis的核心配置文件: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>
		<setting name="cacheEnabled" value="true" />
		<setting name="lazyLoadingEnabled" value="false" />
		<setting name="defaultStatementTimeout" value="30" />
	</settings>

    <mappers>
        <mapper resource="mybatis/UserMapper.xml" />
    </mappers>
</configuration>

这个是最简单的配置方式,settings里配置了一些是否使用缓存,是否使用懒加载,默认的超时时间等信息。而mappers里配置了要加载的具体sql映射配置文件。操作数据库,数据库的连接信息是必不可少的,由于我们项目中使用了spring,这些信息都放在了spring的配置文件中,如果项目中没用spring,那就需要在这个配置文件中配置数据库的相关信息了,可以使用如下的配置:

 <environments default="development">
          <environment id="development">
              <transactionManager type="JDBC" />
              <!-- 配置数据库连接信息 -->
             <dataSource type="POOLED">
                 <property name="driver" value="com.mysql.jdbc.Driver" />
                 <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                 <property name="username" value="root" />
                 <property name="password" value="root" />
             </dataSource>
         </environment>
</environments>

当然了,其中还有一些其他的配置,就不一一来说了,有需要的可以自行查阅相关文档。

接下来就看看,怎么去使用mybatis-config配置文件呢?我们操作数据库,就需要dao,这个类我们一般会继承SqlSessionDaoSupport来进行操作。这个类需要我们注入一个属性sqlSessionFactory。配置如下:

<bean id="userDao" class="com.demo.dao.impl.UserDaoImpl">
		<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>

那么sqlSessionFactory怎么配置呢?

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
         <property name="configLocation" value="classpath:mybatis-config.xml" />
         <property name="dataSource" ref="dataSource" />
</bean>

configLocation指定了mybatis的核心配置文件,dataSource就是数据源,是对数据库的配置信息。

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
	<property name="driverClassName" value="${jdbc.driverClassName}" />
	<property name="url" value="${jdbc.url}" />
	<property name="username" value="${jdbc.username}"></property>
      	<property name="password" value="${jdbc.password}"></property>
</bean>

这个就是datasource的配置,现在使用的是DriverManager的方式去配置的。其实在项目中,比较常用的是JNDI数据源。JNDI数据源不是配置在项目中的,而是配置在容器中。比如在Tomcat数据源的配置是在TOMCAT_HOME/conf/context.xml中context里加上如下的配置:

<Resource name="jdbc/usertest"
       auth="Container"
       type="javax.sql.DataSource"
       driverClassName="com.mysql.jdbc.Driver"
       url="jdbc:mysql://localhost/test"
       username="root"
       password="root"
       maxActive="100"
       maxIdle="30"
       maxWait="10000" />

这样,我们需要修改数据库配置的时候,直接修改容器的配置文件就行了,就不需要修改项目啦。JNDI数据源配置之后,项目中dataSource也需要修改。

	<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="java:comp/env/java/usertest"></property>
	</bean>

这里只需要配置jndiName就可以了,名字必须是java:comp/ev/加上在容器中配置的jndi名字jdbc/usertest。这样jndi数据源就配置好了。

下面我们就来说说mybatis的配置*Mapper.xml,这个文件里存放的就是sql的配置了。一般这个文件的命名都是模块名+Mapper.xml,每个模块都有自己的Mapper。

<mapper namespace="user">

	<resultMap type="com.demo.model.UserModel" id="UserModel">
		<result column="id" property="id" jdbcType="INTEGER"/>
		<result column="name" property="name" jdbcType="VARCHAR"/>
		<result column="age" property="age" jdbcType="INTEGER"/>
		<result column="address" property="address" jdbcType="VARCHAR"/>

	</resultMap>

	<insert id="insertUser" parameterType="com.demo.model.UserModel">
		insert into t_user(`name`,`age`,`address`) values(
			#{name,jdbcType=VARCHAR},
			#{age,jdbcType=INTEGER},
			#{address,jdbcType=VARCHAR}
		);
	</insert>

	<select id="selectUserById" parameterType="INTEGER" resultMap="UserModel">
		select `id`,`name`,`age`,`address` from t_user
		where `id` = #{userid,jdbcType=INTEGER};
	</select>

	<select id="selectAllUser" resultType="com.demo.model.UserModel">
		select `id`,`name`,`age`,`address` from t_user
	</select>
</mapper>

首先是mapper的namespace属性,一般我们都使用模板的名字。

resultMa是结果映射,主要用于将sql的返回结果映射到对象,一般用于数据库表的字段名和Model的属性名不一致的情况。mybatis和java类型映射关系如下:

JDBC Type           Java Type
CHAR                String
VARCHAR             String
LONGVARCHAR         String
NUMERIC             java.math.BigDecimal
DECIMAL             java.math.BigDecimal
BIT             boolean
BOOLEAN             boolean
TINYINT             byte
SMALLINT            short
INTEGER             int
BIGINT              long
REAL                float
FLOAT               double
DOUBLE              double
BINARY              byte[]
VARBINARY           byte[]
LONGVARBINARY               byte[]
DATE                java.sql.Date
TIME                java.sql.Time
TIMESTAMP           java.sql.Timestamp
CLOB                Clob
BLOB                Blob
ARRAY               Array
DISTINCT            mapping of underlying type
STRUCT              Struct
REF                  Ref
DATALINK            java.net.URL

接下来就是sql了,mybatis对sql进行了区分,不同的sql使用不同的标签,插入:insert,查询:select,删除:delete,更新:update,每个sql都必须有一个唯一的id,这个id就是在代码里需要执行这条sql的一个标识。

parameterType是参数的类型,如果没有可以不填,如果是java类型,一定要写全路径名。

返回结果呢,有两种,一种是resultType,一种是resultMap,resultType就是返回正常的类型,如INTEGER,就是不需要转换的对象。如果需要转换,就得使用resultMap了,对应的值,必须在上边的<resultMap>中进行了配置。

以上就是配置方面的信息,在代码中使用就很简单了。

public class UserDaoImpl extends SqlSessionDaoSupport implements UserDao {

	public boolean insert(UserModel user) {
		int count = getSqlSession().insert("insertUser", user);
		if(count > 0) {
			return true;
		}
		return false;
	}

        public UserModel getUser(int userid) {
               List<UserModel> list = getSqlSession().selectList("selectUserById", userid);
               return list != null && list.size() > 0  ? list.get(0) : null;
    }
}

直接调用getSqlSession()的相应方法就可以了。在这要注意,如果有多条查询结果的话,mybatis会默认把他们放到List里。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-11 07:33:48

Java知识总结---MVC模式解析之MyBatis(四)的相关文章

《Java知识应用》模式实现Java 动态代理

动态代理说明:将你提供的接口改造成和你这个类有关的代理对象. Java动态代理案例和原理:https://www.cnblogs.com/jssj/p/11771408.html 我们无法像JVM一样不需要生成Java文件直接生成字节码.我们模拟就通过手工生成java,然后编译成Class文件来实现. 模式案例: package demo.knowledgepoints.invocationhandler; public interface MyInvocationHandler { publi

第80节:Java中的MVC设计模式

前言 了解java中的mvc模式.复习以及回顾! 事务,设置自动连接提交关闭. setAutoCommit(false); conn.commit(); conn.rollBack 隔离级别分别有: 读未提交有脏读 读已提交有不可重复读 可重复读有幻读 可串行化可以解决脏读,幻读,不可重复读 数据库连接池用于创建和管理连接对象. DBCP和C3P0,分别了解代码设置和配置文件设置 DBUtils可以简化数据的增删改查. QueryRunner runner = new QueryRunner()

MVC模式在Java web 应用程序的实现

一.MVC简介 MVC(Model-View-Controller)模型-视图-控制器,最早由Trygve Reenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在20世纪80年代为程序语言Smalltalk发明的一种软件架构.MVC模式的目的是实现一种动态的程序设计,使后续对程序的修改和扩展简化,并且使程序某一部分的重复利用成为可能.除此之外,此模式通过对复杂度的简化,使程序结构更加直观.软件系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能. Mode

MVC模式在Java Web应用程序中的实现

MVC简介 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创

Java的MVC模式简介

Java的MVC模式简介 MVC(Model View Control)模型-视图-控制器 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller),即为MVC.它是一种软件设计的典范, 一.MVC与模板概念的理解 MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个

Java中MVC模式

MVC本来是存在于Desktop程序中的,M是指数据模型,V是指用户界面,C则是控制器.使用MVC的目的是将M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式.比如一批统计数据你可以分别用柱状图.饼图来表示.C存在的目的则是确保M和V的同步,一旦M改变,V应该同步更新. 模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用.最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 Cold

MVC模式下基于SSH三大框架的java web项目excel表格的导出(不依赖另外的jar包)

最近工作中碰到了需要将web页面的表格内容导出到excel表格并下载到本地的需求.以下是在利用网上资源.与同事探讨下,完成的代码. 首先我们需要有定义好的实体类.以下是截取了项目中用到的部分代码. 1 public class QyggDocuments implements java.io.Serializable { 2 3 private static final long serialVersionUID = -2543382529255041149L; 4 5 private Stri

java web笔记——软件三层结构&amp;MVC模式实现注册登陆案例

<学习笔记> Servlet+JSP+JavaBean(MVC)模式适合开发较复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp负责数据显示,javaBean负责封装数据,各个模块之间层次清晰. 软件三层结构为Web层.业务逻辑层(service层).数据访问层(dao层). 简易的注册登陆案例 项目完整源码地址:https://git.oschina.net/beyondzl/register_login 1.搭建开发环境 1.1导人第三方开发包 dom4j-1.6.1.

Java从入门到放弃;MVC 模式

MVC 模式 MVC 模式是一种软件框架模式,被广泛应用在 JavaEE 项目的开发中.MVC 模式很好理解,但也十分重要,在今后的 Web 应用开发中,我们都离不开它. 之前,我们学习过了 Servlet.JSP,看起来它们都可以独立完成许多功能,却各有特点,MVC 就提供了一种扬长避短,双剑合璧的方法. 1.什么是 MVC MVC 即模型(Model) .视图(View).控制器(Controller). 模型(Model) 模型是用于处理数据逻辑的部分. 所谓数据逻辑,也就是数据的映射以及