Mybatis 环境搭建以实现功能,Mybatis配置内容

搭建mybatis 开发环境

1.    引入jar包

Mybatis 3.2.2.jar    ojdbc5.jar    log4j-1.2.17.jar(打印日志,可以看到mybatis的具体实现)

 

2.    为mybatis 设置运行环境(通过配置文件)

mybatis-config.xml 

 

xml version="1.0"encoding="UTF-8"?>

DOCTYPE configurationPUBLIC "-//mybatis.org//DTDConfig 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

     

      <environments default="development">

          

           <environment id="development">

                

                 <transactionManager type="JDBC">transactionManager>

                

                 <dataSource type="POOLED">

                      <property name="driver"value="com.mysql.jdbc.Driver"/>

                      <property name="url"value="jdbc:mysql://localhost:3306/telbook"/>

                      <property name="username"value="root"/>

                      <property name="password"value="123456"/>

                 dataSource>

           environment>

      environments>

     

      <mappers>

           <mapper resource="com/nyist/dao/mapper/UserDaoMapper.xml"/>

      mappers>

configuration>

 

 

3.    Mybatis 的核心类

SqlSessionFactoryBuilder : 负责加载mybatis-config.xml

SQLSessionFactory  负责构建SQLSession

 

SqlSession:       “一次数据库会话”,包含了多次数据库访问操作,相当于jdbc里的connection

4 第一个mybatis程序

1、 新建表和实体类

2、 定义dao接口

3、 通过映射表和映射文件实现dao接口

       xml version="1.0" encoding="UTF-8"?>

DOCTYPE mapper PUBLIC "-//mybatis.org//DTDMapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="first.MessageDao">

   <insert id="insertMessage" parameterType="first.Message">

     

     

     

      insert into Message(id,command,description,content)values(#{id},#{command},#{description},#{content})

     

   insert>

mapper>

       4.将映射文件配置到mybatis-config.xml文件中(通知mybatis,有这个文件)

   <mappers>

      <mapper resource="first/MessageDaoImpl.xml"/>

     

   mappers>

4. 编写测试类

(1)    首先读取mybatis配置文件   

      Reader reader=null;

      try {

        reader = Resources.getResourceAsReader("mybatis-config.xml");

      } catch (IOException e) {

        // TODO Auto-generatedcatch block

        e.printStackTrace();

    }

(2)    然后使用读取到的配置文件构建会话工厂

              SqlSessionFactoryBuilder ssfb=new SqlSessionFactoryBuilder();

SqlSessionFactory sf =ssfb.build(reader);

 

(3)    开启一个会话

  SqlSession session = sf.openSession();

(4)    得到mybatis为我们创建的接口的实现类,这样我们就可以操作实现类完成目标

MessageDao dao = session.getMapper(MessageDao.class);

(5)    调用实现类的方法进行实现

最后事物提交事物关闭session.commit();

     

    session.close();

5

查询功能

 

注意:mybatis 会自动将结果集中的数据封装成指定返回值类型的对象。封装是,将结果的字段值设置到对象的相应属性里,要求结果字段名和对象的属性名保持一致

 

注意:如果我们查询的结果不是只有一个类型的时候,我们定义结果的时候需要使用ResultMap,具体使用如下:

如果假设现在有班级和学生,一个学生属于一个班级,班级时学生的属性

告诉Mybatis查询结果集合实体的映射关系(以学生为主)-->

的全限定民”>

普通属性的设置-->

 

。。。。。。。

    的全限定名”>

     

   

 

 

 

 

6、更新操作    --mapper文件写法

 

Dao中的接口是   public voidupdataMessage(Message m)

   <update id="updateMessage"         parameterType="first.Message">

      update message setcommand=#{command},description=#{description},content=#{content} where id=#{id}

update>

 

注意:updateinsert ,delete操作完成后要进行提交 session.commit()然后在进行关闭操做session.close()

 

6、删除操作

Dao中的接口是   public voiddeleteMessage(int id)

 

7、询表中所有的元素

Dao中的接口是public List queryMessage();

 

   <select id="queryMessage" resultType="first.Message">

      select * from message

   select>

 

8、使用两个参数进行对数据的查找

  

  

   <select id="queryMessageByCommend" parameterType="java.lang.String" resultType="first.Message">

      select * from message where command=#{command} anddescription=#{description}

   select>

9

}  如果在sql中包含> <,sql解析时,特殊符号会发生转义。

}  解决方案1:使用

Mybatis 环境搭建以实现功能,Mybatis配置内容_第1张图片

}  解决方案2 :使用转义字符 > 代替>        <  代替  <

Mybatis 环境搭建以实现功能,Mybatis配置内容_第2张图片

 

MyBatisUtil工具类的封装

      1. InputStreamis = Resources.getResourceAsStream("mybatis-config.xml");

          为了程序的效率 静态代码块当中

      2.SqlSessionFactory :创建sqlsession

              SqlSessionFactory: 重量级资源(功能强大、内存占用多)     每一个应用只创建一个对象   线程安全

              静态代码块中

      3. SqlSsession

              3.1openSqlSession()    线程绑定   close   remove

              3.2 控制事务 commit|rollback

              3.3 创建DAO接口实现

             

             

             

mybatis-config 补充:

      1. 配置内容参数化   (将配置文件中经常修改的内容 再次提取)

           

                 

                 

                 

                 

     

      2. 起别名

         

               

         

             

 

resultMap    查询结果映射对应关系

          数据库和Entity 之间 属性对应关系            对应关系取决于需求 resultMap

         

             

             

             

         

         

              select* from t_user1 where id = #{id}

         

    

---------------------------------------------------------------------------------------------------------------

动态SQL

  1.SQL片段

      解决sql语句的冗余代码问题

     

          selectid,name,password

     

        

 

  2.where字句的处理

      概念:在where子句中引入条件判断,从而动态的生成where子句

        

         

      第二种where动态sql的写法

         

     

         

              id=#{id}

         

         

               and name=#{name}

         

         

               and password=#{password}

         

     

  3.修改  

       

             update t_user1

            

                 

                   name=#{name},

                 

                 

                   password=#{password}

                 

            

             where id =#{id}

        

  

  4.批量

     

          deletefrom t_user where id in

         

          #{item}

         

        

         

         

MyBatis缓存(Cache)【重要】

  什么是缓存

         

  a)  激活MyBatis的全局缓存

      mybatis-config.xml额外的配置

     

         

     

  b)  配置具体需要缓存的数据

      对应的Mapper文件 加入

  c)  实体类要做特殊处理

      implementsSerializable

  d)  注意:

      1 只有在SqlSession关闭的时候,MyBatis才会把查询的数据放置缓存中。

      2 脏数据问题 SqlSession会在事务提交的时候,自动清空缓存

  最佳实践:

    查询方法 需要在调用完成后 关闭SqlSession 确保查询的数据可以进行全局缓存

  增删改操作:调用完成后 进行事务的提交

 

 实例搭建:

目录:

Mybatis 环境搭建以实现功能,Mybatis配置内容_第3张图片

实体:User.java

package com.nyist.entity;

public class User {
	private int id;
	private String username;
	private String password;
	public User() {
		//super();
		// TODO Auto-generated constructor stub
	}
	public User(int id, String username, String password) {
		//super();
		this.id = id;
		this.username = username;
		this.password = password;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	@Override
	public String toString() {
		return "User [id=" + id + ", username=" + username + ", password=" + password + "]";
	}
	
}
接口:

package com.nyist.dao;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.nyist.entity.User;

public interface UserDao {
	public void insert(User user);
	public void delete(int id);
	public void update(User user);
	public List queryAll();
	public User queryOne(int id);
	
	//当传递多个参数的时候,使用@Param("") 进行标示然后使用标示在Mapper文件中使用
	public User queryByUsernameAndPassword(@Param("username")String username,@Param("password") String password);
}
jdbc.properties:数据库配置文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/telbook
jdbc.username=root
jdbc.password=123456


mybatis-config.xml Mybatis的配置文件





	
	
	
	
	
		
		
			
			
			
			
				
				
				
				
				
			
		
	
	
	
		
	


 UserDaoMapper.xml  Mapper文件




	
	
		
		
		
		
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	


测试类:

package com.nyist.test;

import java.io.IOException;
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.nyist.dao.UserDao;
import com.nyist.entity.User;

public class UserTest {
	private static Reader reader = null;
	
	private static SqlSessionFactory factory = null;
	static{
		try {
			
		//	读取Mybatis 的配置文件 mybatis-config.xml 由于是在src直接目录中,所以没有其他子目录
		reader = Resources.getResourceAsReader("mybatis-config.xml");
		// 使用读到的配置文件 创建SqlSessionFactory
		factory = new SqlSessionFactoryBuilder().build(reader);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * 增加数据
	 */
	
	@Test
	public void test1(){
		//使用工厂 开启会话
		SqlSession session = factory.openSession();
		UserDao userDao = session.getMapper(UserDao.class);
		User user = new User();
		user.setUsername("lisi");
		user.setPassword("123456");
		userDao.insert(user);
		session.commit();
		session.close();
	}
	/**
	 * 删除数据
	 */
	@Test
	public void test2(){
		SqlSession session = factory.openSession();
		UserDao userDao = session.getMapper(UserDao.class);
		userDao.delete(8);
		session.commit();
		session.close();
	}
	@Test
	public void test3(){
		SqlSession session = factory.openSession();
		UserDao userDao = session.getMapper(UserDao.class);
		User user = new User();
		user.setId(5);
		user.setUsername("lisi");
		user.setPassword("123456");
		userDao.update(user);
		session.commit();
		session.close();
	}
	
	@Test 
	public void test4(){
		SqlSession session = factory.openSession();
		UserDao userDao = session.getMapper(UserDao.class);
		List users = userDao.queryAll();
		for (User user : users) {
			System.out.println(user);
		}
	}
	
	@Test
	public void test5(){
		SqlSession session = factory.openSession();
		UserDao userDao = session.getMapper(UserDao.class);
		User user = userDao.queryOne(5);
		System.out.println(user);
	}
	
	@Test
	public void test6(){
		SqlSession session = factory.openSession();
		UserDao userDao = session.getMapper(UserDao.class);
		User user = userDao.queryByUsernameAndPassword("zhang", "123456");
		System.out.println(user);
	}
}






你可能感兴趣的:(Java基础,web,实践,Mybaties)