`

mybatis实战教程(mybatis in action),mybatis入门到精通

 
阅读更多


什么是mybatis MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检 索。MyBatis使用简单的XML或注解用于配置和原始映射,将接口和Java的POJOs(Plan Old Java Objects,普通的Java对象)映射成数据库中的记录.orm工具的基本思想 无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点:

1. 从配置文件(通常是XML配置文件中)得到 sessionfactory.

2. 由sessionfactory  产生 session

3. 在session 中完成对数据的增删改查和事务提交等.

4. 在用完之后关闭session 。

1. 在Java 对象和 数据库之间有做mapping 的配置文件,也通常是xml 文件。
mybatis实战教程(mybatis in action)之一:开发环境搭建
mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包。这些软件工具均可以到各自的官方网站上下载。首先建立一个名字为 MyBaits 的 dynamic web project  1. 现阶段,你可以直接建立java 工程,但一般都是开发web项目,这个系列教程最后也是web的,所以一开始就建立web工程。 2. 将 mybatis-3.2.0-SNAPSHOT.jar,mysql-connector-java-5.1.22-bin.jar 拷贝到 web工程的lib目录. 3. 创建mysql 测试数据库和用户表,注意

CREATE TABLE `user` (
  `id` int(4) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `password` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=utf-8

 
下面开始1、设置mybatis 配置文件:Configuration.xml, 在src目录下建立此文件,内容如下:

<?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>
    <typeAliases>
        <typeAlias alias="User" type="com.handly.mybatis.model.User"/>
    </typeAliases>

    <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://127.0.0.1:3306/mis4_produce" />
            <property name="username" value="root"/>
            <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
  
    <mappers>
        <mapper resource="com/handly/mybatis/model/User.xml"/>
    </mappers>
</configuration>

 
2、建立与数据库对应的 java class,以及映射文件. 在src下建立package:com.handly.mybatis.model ,并在这个 package 下建立 User 类:

package com.handly.mybatis.model;

public class User {
private Integer id;
private String username;
private String password;
private String name;

//省略get/set方法
}

 
同时建立这个User 的映射文件 User.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.handly.mybatis.models.UserMapper"> dao.UserDao-->
<mapper namespace="com.handly.mybatis.dao.UserDao">
    <select id="selectUserByID" parameterType="int" resultType="User">
        select * from `user` where id = #{id}
    </select>
   
</mapper>   

 
下面对这几个配置文件解释下:

1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如  这个别名非常重要,你在 具体的类的映射中,比如User.xml 中 resultType 就是对应这里的。要保持一致,当然这里的 resultType 还有另外单独的定义方式,后面再说。

2.  Configuration.xml 里面 的是包含要映射的类的xml配置文件。

3. 在User.xml 文件里面 主要是定义各种SQL 语句,以及这些语句的参数,以及要返回的类型等.

开始测试 在test 源码目录下建立test.user这个package,并建立测试类TestUser:

package test.user;

import java.io.Reader;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import com.handly.mybatis.model.User;


public class TestUser {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;

static {
try {
reader = Resources.getResourceAsReader(&quot;Configuration.xml&quot;);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}

public static SqlSessionFactory getSession() {
return sqlSessionFactory;
}

@Test
public void test() {
SqlSession session = sqlSessionFactory.openSession();
try {
User user = (User) session.selectOne(&quot;com.handly.mybatis.models.UserMapper.selectUserByID&quot;, 1);
System.out.println(user.getUsername());
System.out.println(user.getDate());
} finally {
session.close();
}
}

}

 
现在运行这个程序,是不是得到查询结果了。恭喜你,环境搭建配置成功,接下来第二章,将讲述基于接口的操作方式,增删改查。

mybatis实战教程(mybatis in action)之二:以接口的方式编程
前面一章,已经搭建好了eclipse,mybatis,mysql的环境,并且实现了一个简单的查询。请注意,这种方式是用SqlSession实例来直接执行已映射的SQL语句: session.selectOne(&quot;com.handly.mybatis.models.UserMapper.selectUserByID&quot;, 1)

其实还有更简单的方法,而且是更好的方法,使用合理描述参数和SQL语句返回值的接口(比如UserDao.class),这样现在就可以至此那个更简单,更安全的代码,没有容易发生的字符串文字和转换的错误.下面是详细过程:

package com.handly.mybatis.dao;
import com.handly.mybatis.model.User;

public interface UserDao {
public User selectUserByID(int id);

}

 
请注意:
1、这里面有一个方法名 selectUserByID 必须与 User.xml 里面配置的 select 的id 对应

2、User.xml中namespace,将com.handly.mybatis.models.UserMapper替换为:com.handly.mybatis.dao.UserDao
重写测试代码

/**
* 根据ID获取用户
*/
@Test
public void testGetById(){
SqlSession session = sqlSessionFactory.openSession();
try {
UserDao userDao = session.getMapper(UserDao.class);
User user = userDao.selectUserByID(1);
System.out.println(user.getUsername());
System.out.println(user.getDate());
} finally {
session.close();
}
}

 
运行这个测试程序,就可以看到结果了。
mybatis实战教程(mybatis in action)之三:实现数据的增删改查
前 面已经讲到用接口的方式编程。这种方式,要注意的一个地方就是。在User.xml  的配置文件中,mapper namespace=&quot;com.yihaomen.mybatis.inter.IUserOperation&quot; ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。如果不一致就会出错,这一章主要在上一讲基于接口编程的基础上完成如下事情:

1. 用 mybatis 查询数据,包括列表

2. 用 mybatis 增加数据

3. 用 mybatis 更新数据.

4. 用 mybatis 删除数据.

查询数据,前面已经讲过简单的,主要看查询出列表的 查询出列表,也就是返回list, 在我们这个例子中也就是 List , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的
查询列表的语句在 User.xml 中

<!-- 返回list 的select 语句,注意 resultMap 的值是指向前面定义好的 -->
    <select id="selectUsers" parameterType="string" resultMap="resultListUser">
        select * from user where username like #{userName}
    </select>

 在 UserDao接口中增加方法:public List selectUsers(String userName);     现在在 Test 类中做测试

/**
* 根据用户登录名模糊搜索
*/
@Test
public void testGetByUserName(){
SqlSession session = sqlSessionFactory.openSession();
try {
UserDao userDao = session.getMapper(UserDao.class);
List list = userDao.selectUsers(&quot;admin&quot;);
if(null!=list &amp;&amp; list.size()&gt;0){
for(User user: list){
System.out.println(user.getUsername());
System.out.println(user.getDate());
}
}else{
System.out.println(&quot;list is null;&quot;);
}
} finally {
session.close();
}
}

 用mybatis 增加数据   在 UserDao接口中增加方法:public void addUser(User user); 在 User.xml 中配置

<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        insert into user(username,password,name,date,guoji,quhao,sex,mail,shouji) values(#{username},#{password},#{name},#{date},#{guoji},#{quhao},#{sex},#{mail},#{shouji})
    </insert>

 然后在 Test 中写测试方法:

/**
* 添加用户
*/
@Test
public void testAddUser(){
SqlSession session = sqlSessionFactory.openSession();
try {
UserDao userDao = session.getMapper(UserDao.class);
User user=new User();
user.setUsername(&quot;wwww&quot;);
user.setPassword(&quot;111222333&quot;);
user.setName(&quot;老汤&quot;);
userDao.addUser(user);
session.commit();
System.out.println(&quot;当前增加的用户 id为:&quot;+user.getId());
} finally {
session.close();
}
}

 
用mybatis 更新数据 方法类似,先在 UserDao中增加方法:public void addUser(User user); 然后配置 User.xml

<update id="updateUser" parameterType="User" >
        update user set password=#{password},name=#{name} where id=#{id}
    </update>

 
Test 类总的测试方法如下:

/**
* 更新用户
*/
@Test
public void testUpdateUser(){
SqlSession session = sqlSessionFactory.openSession();
try {
UserDao userDao = session.getMapper(UserDao.class);
User user=new User();
user.setId(1);
user.setUsername(&quot;ccccc&quot;);
user.setPassword(&quot;444555666&quot;);
user.setName(&quot;汤小米&quot;);
userDao.updateUser(user);
session.commit();
System.out.println(&quot;当前增加的用户 id为:&quot;+user.getId());
} finally {
session.close();
}
}

 用mybatis 删除数据   同理,UserDao增加方法:public void deleteUser(int id); 配置User.xml

<delete id="deleteUser" parameterType="int">
        delete from user where id=#{id}
    </delete>    

然后在Test类中写测试方法:

/**
* 删除用户
*/
@Test
public void testDelUser(){
SqlSession session = sqlSessionFactory.openSession();
try {
UserDao userDao = session.getMapper(UserDao.class);
userDao.deleteUser(41);
session.commit();
} finally {
session.close();
}
}

 
 

分享到:
评论

相关推荐

    MyBatis学习代码

    mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...

    ibatis、mybatis官方教程文档集合(含Manning.iBATIS.in.Action)

    Manning.iBATIS.in.Action.Jan.2007.eBook-BBL.pdf MyBatis 3 User Guide Simplified Chinese.pdf MyBatis-3.0.3-Migrations.pdf MyBatis-3.0.3-User-Guide.pdf MyBatis-3-Migrations.doc MyBatis-3-Migrations.pdf ...

    springmybatis

    mybatis实战教程mybatis in action之一开发环境搭建 mybatis实战教程mybatis in action之二以接口的方式编程 mybatis实战教程mybatis in action之三实现数据的增删改查 mybatis实战教程mybatis in action之四实现...

    MybatisGenerate_代码生成_tkMybatis_mybatisgenerate_mybatis_

    5. **集成到构建流程**:为了确保每次代码生成都能与项目的最新状态同步,你可以将MybatisGenerate集成到持续集成(CI)/持续部署(CD)流程中,这样每次代码提交后,都会自动更新生成的代码。 总结起来,Mybatis...

    struts2+mybatis 入门实例

    在实际项目中,通常会使用Spring来管理Struts2的Action和MyBatis的SqlSession,形成SSH(Struts2 + Spring + Hibernate)或SSM(Struts2 + Spring + MyBatis)架构。但在这个入门实例中,我们仅关注Struts2和MyBatis...

    深入浅出MyBatis技术原理与实战(高清目录+部份源码)

    《深入浅出MyBatis技术原理与实战》是一本针对Java开发者深度解析MyBatis框架的专业书籍。MyBatis是一个优秀的持久层框架,...同时,mybatis-in-action-master.zip可能包含了书中示例项目的源代码,供读者实践和参考。

    MyBatis3.2.4完全自学手册

    MyBatis起源于Apache的一个开源项目iBatis,在2010年由Apache Software Foundation迁移到Google Code并更名为MyBatis。之后在2013年11月,该项目迁移至GitHub进行维护。 MyBatis是一个优秀的持久层框架,支持普通的...

    struts与mybatis整合项目

    在实际开发中,通常还会涉及到Spring框架的整合,Spring可以管理Struts的Action和MyBatis的Mapper实例,提供依赖注入,进一步提升应用的可测试性和可维护性。通过Spring的事务管理,可以方便地控制数据库事务的边界...

    EasyBuy 易买网Struts2/mybatis

    2. **Interceptor**:拦截器允许开发者定义一系列预处理和后处理操作,如日志记录、权限验证等,可以灵活地插入到Action调用链中。 3. **Result**:Action执行后的结果,可以是跳转到另一个Action、渲染一个JSP页面...

    MyBatis例子

    - **集成步骤**:配置Struts2的Action类,注入MyBatis的DAO接口,然后在Action中调用DAO接口的方法来执行数据库操作。 - **结果拦截器**:Struts2的Result类型可以配置为MyBatis的结果类型,这样可以直接将查询...

    mybatis-day01

    MyBatis允许开发者编写SQL语句,将它们映射到Java方法上,提供了更加灵活和直接的数据访问方式,避免了传统的数据访问框架中的大量对象关系映射(ORM)工作。 【描述】"用在持久层,还可以再增加或者修改的时候,从...

    Struts2+Mybatis+Spring整合增删改查实例

    在本整合实例中,我们将利用Spring的注解配置来管理Struts2的Action和Mybatis的Mapper。首先,我们需要在Spring配置文件中启用注解扫描,以便Spring能发现并管理我们的Action和Mapper。 1. **Struts2配置**:在...

    spring3.2.6struts2.3.15MyBatis3整合DEMO

    《Spring 3.2.6、Struts 2.3.15与MyBatis 3整合实战详解》 在Java Web开发领域,Spring、Struts和MyBatis是三大主流框架,它们各自承担着不同的职责,共同构建了一个强大的企业级应用开发环境。本DEMO以Spring ...

    struts2+spring+mybatis框架

    5. **整合Spring和MyBatis**:通过Spring的SqlSessionFactoryBean,将MyBatis的SqlSessionTemplate或SqlSessionDaoSupport注入到Service层,实现对数据库的操作。 **数据库建表** 在项目中,通常会提供数据库脚本...

    Struts+spring+mybatis

    5. 数据操作完成后,Service将结果返回给Action,Action再将结果封装成Model对象,通过Struts的Result机制转发到相应的JSP页面显示结果。 6. JSP页面接收到Model对象,渲染成用户可以理解的HTML并返回给客户端。 在...

    JAVA 三大 框架 中文 教程 mybatis教程 Spring中文开发手册

    综合这些教程,开发者可以系统学习到Java企业级开发的关键技术,包括Spring的DI和AOP、MyBatis的SQL映射、Hibernate的ORM以及Struts2的MVC架构。通过深入理解和实践,开发者能够构建出高效、可扩展的Java应用程序。...

    mybatis+struts2整合demo

    总之,"mybatis+struts2整合demo"提供了一个实战平台,让开发者能够了解如何将这两个流行的Java框架集成,从而实现高效的企业级Web应用开发。通过这个示例,你可以学习到MyBatis的动态SQL、Struts2的MVC模式以及两者...

    struts2+spring+mybatis+easyui的实现

    **Struts2** 是一个强大的MVC框架,负责处理HTTP请求并将其映射到特定的Action,进而执行业务逻辑。在Struts2中,Action类是业务逻辑的载体,配置在struts.xml文件中,通过拦截器链来处理请求和响应。Struts2还提供...

    struts2_mybatis_spring_框架实例整合_数据库 文档

    Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...

    struts2和mybatis整合

    通过以上步骤,Struts2和MyBatis的整合可以让我们在处理复杂的业务逻辑时,既能充分利用Struts2的控制能力,又能享受到MyBatis带来的数据库操作便利。这种整合方式降低了系统的耦合度,提高了代码的可维护性和可扩展...

Global site tag (gtag.js) - Google Analytics