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和其他操作将在之后写到
谢谢~