`

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)之一:开发环境搭建 .................................................. 3 mybatis实战教程(mybatis in action)之二:以接口的方式编程 ........................................

    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_

    生成已tk.mybatis封装的mybatis代码

    mybatis_tools mybatis自动生成mapper 和 bean的工具

    Mybatis-Generator 为我们生成的代码非常的复杂,所以我们自己写了mybatis_tools来生成我们的mapper pojo dao service 和action。 现在开源出来给大家使用,如果您想使用此源码来生成自己的代码,但是又弄不懂怎么用...

    jeecg-mybatis-framework

    jeecg-mybatis-framework,采用SpringMVC+Mybatis等主流框架,为jeecg的参考学习版本,参考YIYA网站,仅供大家学习和技术交流。代码生成器:支持单表模型,根据表生成对应的Bean,Service,Dao,Action,XML,JSP等,增删改查...

    mybatis_tools

    mybatis_tools为我们生成的代码非常的复杂,所以我们自己写了mybatis_tools来生成我们的mapper pojo dao service 和action。

    struts_spring_mybatis 登录例子

    struts_spring_mybatis登录小例子,自己写的,好用,就是框架之间的用法。建立个表就行。tomcat 6.0 jdk6.0 ecplise

    struts2 + spring + mybatis 注解开发

    struts2+Spring3.0+Mybatis组合框架开发,可以正常的运行,其中使用spring注解方式管理action

    jasperreports-5.6.0+struts2.1.8+sprint+mybatis的action成功代码

    &lt;li&gt;&lt;a class="icon" href="hj02Action!rpt_pdf" target="dwzExport" targetType="dialog" title="开始打印?" width="800" height="600" &gt;打印pdf(old) &lt;/a&gt;&lt;/li&gt; &lt;li&gt;&lt;a class="icon" href="hj02...

    spring MVC+easyUI+mybatis开发网站后台管理系统

    使用Java平台,采用SpringMVC+Mybatis等主流框架 数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止...

    Spring、SpringMVC和Mybatis框架整合包

    手把手教你整合最优雅SSM框架:SpringMVC + Spring + MyBatis 博客地址:http://blog.csdn.net/qq598535550/article/details/51703190 我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能;而且在大...

    mybatis-day01

    用在持久层,还可以再增加或者修改的时候,从页面直接传入action中

    Spring+SpringMVC+Mybatis简单Demo

    该demo是一个Spring4.1.3+SpringMVC+Mybatis整合而成的demo(使用sqlSessionFactory和MapperScannerConfigurer自动扫描*Mapper....为了方便,没有使用jsp提交action到后台,而是通过自定义监听类测试能否读写数据库。

    mybatis+spring+springtest

    mybatis+spring+springtest 求ActionBean的ut测试

    struts2 spring3 mybatis mysql 整合,实现简单登录

    struts2 spring3 mybatis mysql 整合,实现简单登录。 资源中包含使用的jar包,导入工程可调试 http://localhost:8080/SSM/user/gotoLogin.action

    SpringMVC+Spring+mybatis项目从零开始

    访问路径:http://localhost:8080/ssm-manager-controller/getUsers.action 或者:http://localhost:8080/ssm-manager-controller/xxxTest.action 数据库的,可以根据文章直接创建 ssm-parent实现了所有外部依赖包...

    spring MVC+easyUI+mybatis开发网站后台管理系统(源码)

    使用Java平台,采用SpringMVC+Mybatis等主流框架 数据库:使用免费MYSQL 前端:使用Jquery和Easyui技术.界面清晰简洁,易操作 权限:对菜单,按钮控制.仅展示有权限的菜单和按钮. 拦截:对所有无权限URL进行拦截,防止...

    基于Spring+SpringMVC+MyBatis SSM框架的简易新闻系统前后台

    基于Spring+SpringMVC+MyBatis SSM框架的简易新闻系统前后台源码及sql文件,可用于学习参考。导入eclipse发布后即可。前端使用bootstrap。 前台地址:http://localhost:8080/News/news/news_index.action 后台地址...

Global site tag (gtag.js) - Google Analytics