Mybatis的入门详解

  1. mybatis简介
    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
    MyBatis是一个优秀的持久层框架,它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
    Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回。
  2. mybatis解决jdbc的问题
    1、数据库连接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库连接池可解决此问题。
    解决:在SqlMapConfig.xml中配置数据连接池,使用连接池管理数据库链接。
    2、Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
    解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
    3、向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
    解决:Mybatis自动将java对象映射至sql语句,通过statement中的parameterType定义输入参数的类型。
    4、对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
    解决:Mybatis自动将sql执行结果映射至java对象,通过statement中的resultType定义输出结果的类型。
  3. mybatis的入门详解
    -|导包
    mybatis的核心包:
核心包
	mybatis-3.2.7.jar
	mysql-connector-java-5.1.7-bin.jar
依赖包:主要第打印log及其他
	asm-3.3.1.jar
	cglib-2.2.2.jar
	commons-logging-1.1.1.jar
	/javassist-3.17.1-GA.jar
	log4j-1.2.17.jar
	log4j-api-2.0-rc1.jar
	log4j-core-2.0-rc1.jar
	slf4j-api-1.7.5.jar
	slf4j-log4j12-1.7.5.jar
导包完成
  1. 准备数据库:测试用的bos_puya32数据库,操作的表为t_customer
    -|t_customer分别有
    id,name,station,telephone,address,decidedzone_id 这几个字段,
    5.准备接入数据,创建t_t_customer对应的实体类,包名为com.puya.mybatis.pojo
package com.puya.mybatis.pojo;

import java.io.Serializable;

public class User implements Serializable {
	private Integer id;
	private String name;
	private String station;
	private String telephone;
	private String address;
	private String decidedzone_id;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStation() {
		return station;
	}
	public void setStation(String station) {
		this.station = station;
	}
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getDecidedzone_id() {
		return decidedzone_id;
	}
	public void setDecidedzone_id(String decidedzone_id) {
		this.decidedzone_id = decidedzone_id;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", station=" + station + ", telephone=" + telephone + ", address="
				+ address + ", decidedzone_id=" + decidedzone_id + "]";
	}
	

	
}

  1. 配置log4j,创建一个log4j.properties,内容如下,主要是打印log的作用
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
  1. 配置mybatis,创建一个sqlMapConfig.xml文件,名字固定
    文件的头固定为


  1. 填写mybatis的configuration内容,注意数据库的名字和登录的账号和密码,否则jdbc连接不上



	
	
	
		
			
			
			
			
				
				
				
				
			
		
	
	
	
	
		
		
	

  1. 书写测试的代码,通过id查找一个对象
@Test
	public void testMybatis() throws Exception {
		//加载核心的配置文件
		String path ="sqlMapConfig.xml";
		//读取配置文件获取流
		InputStream in = Resources.getResourceAsStream(path);
		//创建sqlSessionFactory
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		//创建session
		SqlSession session = sessionFactory.openSession();
		//执行sql语句
		User user = session.selectOne("user.findUserById", 1);
		
		System.out.println(user); 
	}
	
  1. 在这里就疑问sql语句写在哪里? 每一个实体类都需要对应一个实体类的xml文件,然后配置在mybatis的文件中去
    User类对应的实体xml文件,User.xml文件





	

	
	
	
	
	
		
		
			select LAST_INSERT_ID()    
		
		insert into t_customer (name,station,telephone,address,decidedzone_id) value(#{name},#{station},#{telephone},#{address},#{decidedzone_id})
	
	
	
	
		update t_customer 
		set name=#{name},station=#{station},telephone=#{telephone},address=#{address},decidedzone_id=#{decidedzone_id}
		where id=#{id}
	
	
	
		delete from t_customer where id =#{value}
		
	




一定要记得配置到sqlMapConfig.xml 文件中去,路径配置正确即可

	
	
		
		
	
	//执行sql语句
	User user = session.selectOne("user.findUserById", 1);
	这句代码执行的时候就会执行User.xml文件中的
	
语句,就查询到了响应的User对象
  1. 根据用户名字模糊查询
	@Test
	public void findUserByUserName() throws Exception {
		//加载核心的配置文件
		String path ="sqlMapConfig.xml";
		//读取配置文件获取流
		InputStream in = Resources.getResourceAsStream(path);
		//创建sqlSessionFactory
		SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(in);
		//创建session
		SqlSession session = sessionFactory.openSession();
		//执行sql语句
		List data = session.selectList("user.findUserByUserName", "张三");
	
		for (User user2 : data) {
			System.out.println(user2);
			
		}
	}

对应的User.xml文件中的sql语句

	
	

                    

你可能感兴趣的:(Mybatis的入门详解)