MyBatis 如何写配置文件和简单使用

#技术教程 发布时间: 2026-01-18

MyBatis 如何写配置文件和简单使用

MyBatis3.x

这里简单贴一下MyBatis的介绍,具体使用方法会在代码中贴出。

MyBatis的前世今生

MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis。

尽管如此,它的包结构仍然为ibatis。

www.mybatis.org/

https://github.com/mybatis

MyBatis介绍

MyBatis是一个数据持久层(ORM)框架。把实体类和SQL语句之间建立了映射关系,是一种半自动化的ORM实现。

MyBatis的优点:
1.基于SQL语法,简单易学。
2.能了解底层组装过程。  
3.SQL语句封装在配置文件中,便于统一管理与维护,降低了程序的耦合度。
4.程序调试方便。

所有sql语句,全部定义在xml(建议)中。也可以通过注解的方式在接口上实现。这些映射文件称之为mapper。

与传统JDBC的比较

减少了61%的代码量

最简单的持久化框架

架构级性能增强

SQL代码从程序代码中彻底分离,可重用

增强了项目中的分工

增强了移植性

canMyBatisDemo

包、类分布图:


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> 
  <typeAliases> 
    <!-- 配置类型的别名 --> 
    <typeAlias alias="User" type="cn.hncu.domain.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/mybatis?characterEncoding=UTF-8" /> 
        <property name="username" value="hncu" /> 
        <property name="password" value="1234" /> 
        <property name="poolMaximumActiveConnections" value="5"/> 
      </dataSource> 
    </environment> 
  </environments> 
  <mappers> 
    <mapper resource="cn/hncu/domain/User.xml"></mapper> 
    <mapper resource="cn/hncu/domain/User2.xml"></mapper> 
  </mappers> 
</configuration> 

SqlSessionUtils.java

package cn.hncu.utils; 
 
import java.io.IOException; 
import java.io.InputStream; 
import java.sql.Connection; 
 
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 com.mysql.jdbc.interceptors.SessionAssociationInterceptor; 
 
 
public class SqlSessionUtils { 
  private static SqlSessionFactory sessionFactory=null;//DataSource--pool 
  static{ 
    try { 
      InputStream in=Resources.getResourceAsStream("mybatis-config.xml");//加载配置文件 
      sessionFactory=new SqlSessionFactoryBuilder().build(in); 
      /* 
       * 这里给出一种不需要使用Resources类加载文件的方法(利用ClassLoader以底层加载配置文件) 
        sessionFactory=new SqlSessionFactoryBuilder().build(SqlSessionUtils.class.getClassLoader().getResourceAsStream("mybatis-config.xml")); 
       */ 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
  } 
   
  public static SqlSessionFactory getSessionFactory(){ 
    return sessionFactory; 
  } 
  public static SqlSession getSqlSession(){ 
    return sessionFactory.openSession(); 
  } 
  public static void main(String[] args) { 
    //mybatis在池中控制的是连接的数量 
    for(int i=0;i<10;i++){ 
      SqlSession s=getSqlSession(); 
      System.out.println(s); 
      Connection con=s.getConnection(); 
      System.out.println("con: "+con); 
    } 
  } 
} 

User.java

package cn.hncu.domain; 
 
public class User { 
  private String id; 
  private String name; 
  private String pwd; 
  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; 
  } 
  public String getPwd() { 
    return pwd; 
  } 
  public void setPwd(String pwd) { 
    this.pwd = pwd; 
  } 
  @Override 
  public String toString() { 
    return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]"; 
  } 
   
} 

User的映射文件User.xml(最简单的配置文件)

package cn.hncu.domain; 
 
import java.util.List; 
 
public interface UserMapper { 
  public List<User> all(); 
  public List<User> user2(String string); 
  public List<User> user3(User user); 
} 

UserMapper.java(接口,官方建议使用接口方式----更安全)

package cn.hncu.domain; 
 
import java.util.List; 
 
public interface UserMapper { 
  public List<User> all(); 
  public List<User> user2(String string); 
  public List<User> user3(User user); 
} 


Demo1.java

package cn.hncu.demo; 
 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import org.apache.ibatis.session.SqlSession; 
import org.junit.Test; 
 
import cn.hncu.domain.User; 
import cn.hncu.domain.UserMapper; 
import cn.hncu.utils.SqlSessionUtils; 
 
public class Demo1 { 
  @Test 
  public void test1(){ 
    //先获取SqlSession 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    List<User> list=s.selectList("users.all");//返回结果用list封装,参数用id来指定使用映射文件中的哪一段,<select>或<insert>等sql操作 
//   List<User> list=s.selectList("all");//省略命名空间----如果名称(id)冲突,则必须使用命名空间来进行识别 
    //System.out.println(list); 
    for(User u:list){ 
      System.out.println(u); 
    } 
  } 
  <span style="color:#ff0000;">//使用接口方式操作数据库(推荐使用这种方式,更安全) 
  /*步骤 
   * 1.写一个接口:UserMapper,接口中的抽象方法名必须和<select>的属性id值相同,即一个抽象方法代表一段操作 
   * 2.把User2.xml中的命名空间改成接口的完全类名 
   * 3.在测试代码中(又dao层的java),用"s.getMapper()"获得一个代理类对象,使用该对象调用某个方法,即执行某段操作 
   */</span> 
   
  @Test//面向接口的方式,以下调用的都是: User2.xml 
  public void test2(){ 
    //先获取SqlSession 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    UserMapper m=s.getMapper(UserMapper.class);//获得一个代理对象 
    List<User>list=m.all(); 
    System.out.println(list); 
  } 
  ///////////////test3()演示条件查询中的单条件查询,调用User2.xml/////////////////// 
   
  @Test//传统方式 
  public void test3_1(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
//   List<User> users=s.selectList("cn.hncu.domain.UserMapper.all"); 
    List<User> users=s.selectList("user2","2");//返回结果用List封装,内部的元素文件类型由映射文件配置 
    System.out.println(users); 
  } 
  @Test//面向接口方式 
  public void test3_2(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    UserMapper u=s.getMapper(UserMapper.class); 
    List<User> users=u.user2("3"); 
    System.out.println(users); 
  } 
   
  ///////////////////多条件查询(条件查询最好用对象封装条件)////////////// 
  @Test 
  public void test4(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
     
    UserMapper u=s.getMapper(UserMapper.class); 
    User user=new User(); 
    user.setId("4"); 
    user.setName("二蛋"); 
    List<User> users=u.user3(user); 
    System.out.println(users); 
  } 
  @Test 
  public void test5(){//返回结果用map 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    System.out.println(s); 
    List<Map<String,Object>> users=s.selectList("user4"); 
    for(Map<String,Object> user:users){ 
      System.out.println(user); 
    } 
  } 
  @Test//把输入参数设为map 
  public void test6(){ 
    SqlSession s=SqlSessionUtils.getSqlSession(); 
    Map<String, Object> map=new HashMap<String,Object>(); 
    map.put("id", "5"); 
    map.put("name", "小奇"); 
    List<Map<String,Object>> users=s.selectList("user5",map); 
    for(Map<String,Object> user:users){ 
      System.out.println(user); 
    } 
  } 
} 

User2.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="cn.hncu.domain.UserMapper"> 
  <select id="all" resultType="cn.hncu.domain.User"> 
    select * from users 
  </select> 
</mapper> 
--> 
<mapper namespace="cn.hncu.domain.UserMapper"> 
<!-- 使用了类型别名 --> 
  <select id="all" resultType="User"> 
    select * from users 
  </select> 
   
  <!--条件查询之单条件查询,下面的sql语句的参数可以随便写 --> 
  <select id="user2" resultType="User" parameterType="string"> 
    select * from users where id=#{xx} 
  </select> 
  <!--条件查询之多条件查询,下面的sql语句的参数必须要和值对象的属性名一致(要用if条件式判断参数是否为空) --> 
  <select id="user3" resultType="User" parameterType="string"> 
    select * from users where id=#{id} 
    <if test="name!=null"> 
      and name=#{name} 
    </if> 
  </select> 
  <!-- 把查询结果封装成List<Map<>> --> 
  <select id="user4" resultType="map"> 
    select * from users 
  </select> 
  <!-- 把输入参数封装成map类型 --> 
  <select id="user5" resultType="hashmap" parameterType="hashmap"> 
    select * from users where id=#{id} 
    <if test="name!=null"> 
      and name=#{name} 
    </if> 
  </select> 
</mapper> 

这里只是初次见到mybatis,知道了如何简单使用,具体复杂用法下次再贴出(对数据库的CRUD和使用过程中的一些细节)。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!




上一篇 : 前端开发必知的15个jQuery小技巧

下一篇 : 小米手机怎么刷机解锁密码_小米手机忘记密码刷机恢复教程指南

推荐阅读

电话:400 76543 55
邮箱:915688610@qq.com
品牌营销
客服微信
搜索营销
公众号
©  丽景创新 版权所有 赣ICP备2024032158号 
宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 宜昌市隼壹珍商贸有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 内江振祥营销策划有限公司 恩施州毯滚百货有限公司 恩施州毯滚百货有限公司 襄阳市蜂欢商贸有限公司 襄阳市蜂欢商贸有限公司 恩施州换冯百货有限公司 恩施州换冯百货有限公司 恩施州健提百货有限公司 恩施州健提百货有限公司 西安益零商贸有限公司 西安益零商贸有限公司 南奥教育 南奥教育 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南奥教育网 南奥教育网 南奥教育网 南奥教育网 南奥学习网 南奥学习网 南奥学习网 南奥学习网 南奥教育 南奥教育 南奥留学记 南奥留学记 南奥教育 南奥教育 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌市南奥教育咨询有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 南昌壹佳企网络通信有限公司 广照天下广告 广照天下广告 广照天下广告策划 广照天下广告策划 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下 广照天下广告策划 广照天下广告策划 广照天下广告策划 广照天下广告策划 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 南昌市广照天下广告策划有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 宿州市腾雀网络科技有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司 九江市云仁商务咨询有限公司
品牌营销
专业SEO优化
添加左侧专家微信
获取产品详细报价方案