视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MyBatis如何写配置文件和简单使用
2020-11-09 20:39:27 责编:小采
文档

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和使用过程中的一些细节)。

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

您可能感兴趣的文章:

  • Spring+SpringMVC+MyBatis深入学习及搭建(三)之MyBatis全局配置文件解析
  • 详解MyBatis批量插入数据Mapper配置文件的写法
  • mybatis 项目配置文件实例详解
  • MyBatis配置文件的写法和简单使用
  • 使用XSD校验Mybatis的SqlMapper配置文件的方法(2)
  • 使用XSD校验Mybatis的SqlMapper配置文件的方法(1)
  • Mybatis Generator最完美配置文件详解(完整版)
  • mybatis配置文件简介_动力节点Java学院整理
  • 下载本文
    显示全文
    专题