Mybatis学习记录(二)——从JDBC到Mybati

2018.4.6

仅为个人理解 不足之处欢迎指正~


先整理一下使用JDBC完成CRUD操作的步骤

创建数据库、表与插入数据

第一步先创建数据库 mybatistest

create database mybatistest;

然后创建student表 表中包含id与name两个属性

use mybatistest;
create table student(
id int(11) not null,
name varchar(32) default null,
primary key(id))
enging=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

插入几条学生信息

insert into student values (2018040501,'周杰伦');
insert into student values (2018040502,'陈奕迅');

现在使用传统JDBC方法进行增删改查找操作

需要用到的jar:


import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

建立连接:

//获得连接
	public static Connection getConnection(){
		String driver ="com.mysql.jdbc.Driver";
		String url ="jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&characterEncoding=utf-8&useSSL=false";
		String user ="root";
		String password ="root";
		Connection connection =null;
		try {
			Class.forName(driver);
			connection =DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

增:

//增
	public String add(int id,String name) {
		try {
			if(id==0||name==null)
			{
				return "学号或姓名为空!";
			}else{
				Connection con = getConnection();
				PreparedStatement preparedStatement = null;
				String sql=	 "insert into student (id,name) values(?,?)";
				preparedStatement=con.prepareStatement(sql);
				preparedStatement.setInt(1, id);
				preparedStatement.setString(2, name);
				preparedStatement.executeUpdate();
				return "添加成功";
			}
		} catch (Exception e) {
			return "添加失败";
		}
	}

运行以下测试代码并刷新数据库:

public class Test 
{
	public static void main(String args[])
	{
		JDBC jdbc=new JDBC();
		String insert=jdbc.add(2018040503, "张学友");
		System.out.println(insert);
	}	
}

删:

	//删
	public String delete(int id) 
	{
		try{
			Connection con = getConnection();
			PreparedStatement preparedStatement = null;
			String sql=	 "delete from student where id=?";
			preparedStatement=con.prepareStatement(sql);
			preparedStatement.setInt(1, id);
			preparedStatement.executeUpdate();
			return "删除成功";
		}
		catch (Exception e) {
			return "删除失败";
		}
	}

改:

//改
	public String update(int id,String name) {
		try {
			if(id==0||name==null)
			{
				return "学号或姓名为空!";
			}else{
				Connection con = getConnection();
				PreparedStatement preparedStatement = null;
				String sql=	 "update student set name=? where id=?";
				preparedStatement=con.prepareStatement(sql);
				preparedStatement.setInt(2, id);
				preparedStatement.setString(1, name);
				preparedStatement.executeUpdate();
				return "修改成功";
			}
		} catch (Exception e) {
			return "修改失败";
		}
	}

查:

先建立student类

public class student 
{
	private int id;
	private String name;
        student(String name,int id)
	{
		this.id=id;
		this.name=name;
	}
	
	public int getId()
	{
		return id;
	}
	
	public void setId(int id)
	{
		this.id=id;
	}
	
	public String getName()
	{
		return name;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}
}
	//查
	public student find(int id){
		int stuid = 0;
		String name=null;
		String sql = "select * from student where id = ?";
		Connection con =getConnection();
		PreparedStatement pstmt =null;
		ResultSet rs = null;
		try { 
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, id);
			rs = pstmt.executeQuery();
			while(rs.next()){
				 stuid=rs.getInt(1);
				 name=rs.getString(2);
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(pstmt!=null)pstmt.close();
				if(con!=null)con.close();
			} catch (SQLException e) {		
				e.printStackTrace();
			}
		}
	 student stu=new student(name,stuid);
	 return  stu;
	}

执行以下代码:

public class Test 
{
	public static void main(String args[])
	{
		JDBC jdbc=new JDBC();
		student stu=jdbc.find(2018040501);
		System.out.println(stu.getName());
	}
}


下面使用Mybatis进行简单的查询操作:

依旧使用原来的数据库与表

建立Java工程,需要用到的jar包如下:


先建立实体类:


package com.tzy.pojo;

public class Student 
{
	private int id;
	private String name;
	
	public int getId()
	{
		return id;
	}
	
	public void setId(int id)
	{
		this.id=id;
	}
	
	public String getName()
	{
		return name;
	}
	
	public void setName(String name)
	{
		this.name=name;
	}
}

注:什么是pojo?

POJO即(Plain Ordinary Java Object)简单的Java对象

我们可以将它理解为一个JavaBean,但它实际上并不是一个真正的JavaBean,它是一种简单的Bean,目前我将它理解为带有get和set方法,包含不同类型的数据,可以用来表现现实生活中的对象的用于临时传递数据的组件。

配置mysql驱动文件:


jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatistest?useUnicode\=true&characterEncoding\=utf8
jdbc.username=root
jdbc.password=root

注:什么是propertise以及为什么要使用它?

propertises文件即属性文件

看上去像是一张表格,实际上采用了键值对的形式表示某些属性

这样做的好处是将代码与数值相分离,直观且方便修改


设置Mybatis配置文件:mybatis-configuration.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>
	<!-- 引入外部配置文件 -->
	<properties resource="mysql.properties">
	</properties>
    
    <typeAliases>
    <!-- 定义别名 -->
    <!-- 针对单个别名定义type:类型的路径  alias:别名 -->
    <typeAlias type="com.tzy.pojo.Student" alias="student"/>
    <!-- 下面一行package name 作用为批量定义别名 指定一个包名 mybatis会自动扫描这个
    包中的pojo类 自动定义别名 别名就是类名(首字母大小写均可) -->
      <package name="com.tzy.pojo"/>
    </typeAliases>
    
   <!-- 和spring整合后 environments配置将废除 -->
    <environments default="development">
        <environment id="development">
        <!-- 使用jdbc事务管理 事务控制交给mybatis -->
            <transactionManager type="JDBC"/>
            <!-- 数据库连接池 由mybatis管理 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}"/>
      	  		<property name="url" value="${jdbc.url}" />
     		  	<property name="username" value="${jdbc.username}" />
        		<property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    
    <!-- 加载映射文件 -->
    <!-- resource方法 一次加载一个映射文件  注意路径和xml文件-->
    <mappers>
        <mapper resource="com/tzy/pojo/Student.xml"/>
    </mappers>
</configuration>

接下来建立这个Student的映射文件Student.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 通常设置成pojo包名
 		 在后续调用sql语句的时候 会使用到 -->
    <mapper namespace="com.tzy.pojo">
    <!-- 这条语句中 用id:listStudent进行标示 供后续代码调用
    		resultType表示的返回一个关联Student类的数据
    		在这里本来应该使用的是com.tzy.pojo.Student
    		但是在之前的mybatis-configuration.xml中定义了
    		typeAliases别名 所以可以直接使用Student-->
        <select id="listStudent" resultType="Student">
            select * from   category_     
        </select>
    </mapper>

稍微对以上两个xml文件解释一下:

  • mybatis-configuration.xml是mybatis用来建立sessionFactory所需要的,里面包含了与数据库连接的相关信息,还有pojo类的别名,别名非常重要,在具体的类的映射 比如Student.xml中 resultType一定要与这个别名保持一致 
  • mybatis-configuration.xml中<mapper>所包含的语句是需要映射的类的xml配置文件 有其他的方法可以省略这个步骤 以后再提
  • 在Student.xml中 主要是定义了各种SQL语句 后续会提到insert delete等其他操作

现在进行一下测试,建立测试类TestMybatis:

package com.tzy.test;

import java.io.IOException;
import java.io.InputStream;
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 com.tzy.pojo.Student;
 
public class TestMybatis {
 
    public static void main(String[] args) throws IOException {
    	//mybatis配置文件
        String resource = "mybatis-configuration.xml";
        //得到配置文件流
        InputStream inputStream = Resources.getResourceAsStream(resource);
        //创建会话工厂 传入mybatis的配置文件信息
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session=sqlSessionFactory.openSession();
         
        List<Student> cs=session.selectList("listStudent");
        // 冒号是遍历的作用
        for (Student stu : cs) {
            System.out.println(stu.getName()+"   "+stu.getId());
        }
         
    }
}

注:简单解释一下selectList和selectOne

selectOne表示查询出一条记录进行映射 selectList表示查询出多条记录(一个列表)进行映射

如果使用selectOne可以实现 那么使用selectList也可以实现 理解为list中只有一个对象

但是:

如果使用selectList查询多条记录 那么不能使用selectOne

现在运行一下测试类 可以看到以下结果:


最后看一下整个项目的结构:


在进行编写时 建议先进行configuration的配置 但是要记住在配置中加入还未编写的  类.xml


本文仅仅涉及mybatis的selectList用法

主要目的是进行JDBC与mybatis的转换和mybatis的初步配置使用

完整CRUD和其他操作将在之后写到

谢谢~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值