Mybatis入门学习

  • Mybatis简介

  1. 优秀的持久层框架(ORM框架(object relation mapping):半自动持久框架)
  2. 它对jdbc的操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
  3. 完成表和实体类的一个映射
  4. Mybatis通过xml或注解的方式将要执行的各种statement(statement、preparedStatemnt、CallableStatement)配置起来,并通过java对象和statement中的sql进行映射生成最终执行的sql语句,最后由mybatis框架执行sql并将结果映射成java对象并返回
  • 框架与内库

  1. 框架:半成品,我们根据业务需求在框架上进行扩展或者修改。(就比如像填空题)。使用框架:1.导包2.对象3.方法,框架中使用技术:1:XML解析 2:反射

  2. 内库:封装一些功能。(就像选择题)

  • Mybatis使用及环境搭建

 

  1. 导包
  2. 配置全局配置文件mybatis.xml,

    transactionManager---配置事务管理      JDBC---事务使用原生JDBC管    MANAGED---不使用事务  dataSource:unpooled---不使用数据库连接 pooled---使用数据库连接.                                                                                      也可以引入本地dtd:window—pre—搜Xml—xmlcatalog—add—systemID—loaction(本机dtd文件路径)—key(http://mybatis.org/dtd/mybatis-3-config.dtd)

    <?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>
          <package name="cn.gok.entity"/><!-- 配置包名,可以直接使用类名 -->
        </typeAliases>
    	<environments default="mysql">
    	    <environment id="mysql">
    	       <transactionManager type="JDBC"> </transactionManager>
    	       <dataSource type="POOLED">
    	          <property name="driver" value="com.mysql.jdbc.Driver"/>
    	          <property name="url" value="jdbc:mysql://localhost:3306/students"/>
    	          <property name="username" value="root"/>
    	          <property name="password" value="admin"/>
    	        </dataSource>
    	    </environment>
    	</environments>
    	<mappers>
    	<mapper resource="cn/gok/mapper/Stu-mapper.xml"/>
    	</mappers>
    </configuration>

  3 .建立实体类和数据表(类名和实体类的属性名)

package cn.gok.entity;

/**
 * 实体类
 * @author HS
 */
public class Stu {
	
	private int s_no;
	private String s_name;
	private String s_password;
	public int getS_no() {
		return s_no;
	}
	public void setS_no(int s_no) {
		this.s_no = s_no;
	}
	public String getS_name() {
		return s_name;
	}
	public void setS_name(String s_name) {
		this.s_name = s_name;
	}
	public String getS_password() {
		return s_password;
	}
	public void setS_password(String s_password) {
		this.s_password = s_password;
	}
	public Stu(int s_no, String s_name, String s_password) {
		super();
		this.s_no = s_no;
		this.s_name = s_name;
		this.s_password = s_password;
	}
	public Stu() {
		super();
		// TODO Auto-generated constructor stub
	}
	@Override
	public String toString() {
		return "Stu [s_no=" + s_no + ", s_name=" + s_name + ", s_password=" + s_password + "]";
	}
	

}

  4.新建一个mapper包专门用来存放映射XML,新建Stu-mapper.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.gok.dao.StuDao">
   <select id="findAllStu" resultType="Stu">
      select * from stu
   </select>

   <!-- 此处不设置参数类型也可以用 -->
   <select id="findOneStu" resultType="Stu">
      select * from stu where s_no=#{s_no} and s_name=#{s_name}
   </select>
   
   <select id="countAll" resultType="int">
       select count(*) from stu
   </select>
   
   <update id="updateOne">
      update stu
      <set>
      s_no=#{s_no},s_name=#{s_name},s_password=#{s_password}
      </set> 
      <where>s_no=#{s_no}</where> 
   </update>
   
   <insert id="insertOne" parameterType="Stu">
       insert into stu values(s_no,#{s_name},#{s_password})
   </insert>
   
   
</mapper>

5.编写测试类,在测试类里面获取sqlsession,对数据库操作。

package cn.gok.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import cn.gok.entity.Stu;

public class MainTest {

	public static void main(String[] args) throws FileNotFoundException {
		SqlSessionFactory ssf=null;
		SqlSession ss=null;
		InputStream in=new FileInputStream(new File("src/mybatis.xml"));
		//sqlsession工厂从sqlsession工厂建造者获取得到
		ssf=new SqlSessionFactoryBuilder().build(in);
		//sqlsession从工厂得到
		ss=ssf.openSession();
		//用来设定操作对应的类名,方便后面直接拼字符串就好
		String statement="cn.gok.dao.StuDao";
		//此部分测试返回对象构成的list
		List<Stu> list=ss.selectList(statement+".findAllStu");
		for (Stu stu : list) {
			System.out.println(stu);
		}
		//此部分测试查询单个的对象,不指定参数类型,可以传对象也可以map
		Stu stu1=new Stu(1, "chen","");
		Stu stu=ss.selectOne(statement+".findOneStu", stu1);
		System.out.println(stu);
		Map map = new HashMap<>();
		map.put("s_no", 2);
		map.put("s_name","shu");
		Stu stu2=ss.selectOne(statement+".findOneStu", map);
		System.out.println(stu2);
		
		//此部分测试查询返回int类型
		int count =ss.selectOne(statement+".countAll");
		System.out.println(count);
		
		//此部分测试更新update,返回值是匹配到的个数,而不是改变的个数
		Stu stu3= new Stu(2, "shushu", "888888");
		int update_num=ss.update(statement+".updateOne", stu3);
		ss.commit();
		System.out.println("更新"+update_num+"条数据");
		
		//测试insert
		Stu stu4= new Stu(5, "shushu", "888888");
		int insert_num=ss.insert(statement+".insertOne", stu4);
		ss.commit();
		System.out.println("插入"+insert_num+"条数据");
		//因为mybatis把事务抽象到了TransactionManager中,而事务默认开启,
		//所以我们只需要使用sqlSession.commit()和rollback()方法,因为在sqlSession中,
		//实际上调用的是transactionManager来完成的具体的事务提交和回滚操作。
		
	}

}

结果:

 

 

参数传递

1.#{}

a)index:按照下标来给值。注意:下标从0

b)param1

 #和$区别

1.#使用的?占位符来设置参数---可以防止SQL注入

2.$通过拼接SQL来实现。

 

别名:

       Configuation---typeAils---pakecage   对整个包取别名

      引用是可以直接应用实体类。

 

 

 附一个Mybatis新手使用博客地址:

https://blog.youkuaiyun.com/endlessseaofcrow/article/details/80410933#11%E5%9F%BA%E6%9C%AC%E5%86%85%E5%AE%B9

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值