为了以后考研复试能拿出点东西,抓紧看框架了,今天重操旧业看java
MyBatis:
可以简化jdbc操作,实现数据的持久化。
ORM
实现对象与表之间的映射关系。
操作对象一般操作数据库
步骤:
1.配置mybatis
conf.xml:配置数据库信息和需要加载的映射文件
表-类
映射文件 xxMapper.xml:增删改查的标签
测试类:
session.selectOne(“需要查询的namespace.id”,"SQL的参数值 ");
MyBatis规定,在mapper.xml文件中只允许有一个输入parameterType和一个输出resultType
parameterType:
如果参数是简单类型(八个基本类型+String)则可以使用任何一个占位符。eg:#{sdfas}
如果是对象,则必须是对象的属性
resultType:
如果返回值是一个对象,则无论返回一个还是多个,resultType都写成类.
每一个mybatis项目都需要如下步骤
多翻翻Mybatis的PDF文件
1.配置conf.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">
<!-- 上述两个的意思就是能在xml文件中提示各个参数,如果没有联网从project的properies中配置 -->
<configuration>
<environments default="development"><!-- 用来选择在那个环境使用 -->
<!-- 自己主机 -->
<environment id="development">
<transactionManager type="JDBC" />
<!--
事务提交方式:
JDBC:手工方式:commit,rollback close
MANAGED:将事务交给其他组件去托管(string),默认会关闭连接
-->
<dataSource type="POOLED">
<!--数据源类型:
UNPOOLED:不适用数据连接池,使用jdbc
POOLED:使用数据库连接池(第三方)
JNDI:从tomcat中获取一个内置的数据库连接池(数据库连接池-数据源)
连接池:是java代码与sql的一个连接集合,通过连接可以并发与去除打开或者关闭数据库的步骤
-->
<!-- 配置数据库信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3300/new?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
<environment id="shishi">
<!-- 布置主机 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- 配置数据库信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3300/new?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
<environment id="test">
<!-- 測試主机 -->
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<!-- 配置数据库信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost:3300/new?serverTimezone=UTC" />
<property name="username" value="root" />
<property name="password" value="123456" />
</dataSource>
</environment>
</environments>
<mappers>
<!-- 加载映射文件 -->
<mapper resource="org/qgm/entity/studentMapper.xml" />
</mappers>
</configuration>
- 2.完成类与表的建立,一一对应关系
- 3完成mapper.mxl文件
<?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">
<!-- namespace:该Mapper.xml文件的唯一标识符 -->
<mapper namespace="org.qgm.entity.studentMapper">
<!-- id是用来唯一定位sql语句,parameterType是where后面要查找的类型,resulttype是*的返回值,*返回时类全部。 -->
<select id="queryStudentBystuno" parameterType="int"
resultType="org.qgm.entity.Student">
select * from student where stuNo=#{stuNo}
</select>
<insert id="addStudent" parameterType="org.qgm.entity.Student">
insert into
student(stuNo,stuName,stuAge,graName)
values(#{stuNo},#{stuName},#{stuAge},#{graName})
</insert>
<delete id="deleteStudentByStuno" parameterType="int">
delete from student where stuNo=#{stuNo}
</delete>
<update id="updataStudentByStuno" parameterType="org.qgm.entity.Student">
update student set stuName=#{stuName},stuAge=#{stuAge},graName=#{stuAge} where stuNo=#{stuNo}
</update>
<select id="queryAllStudent" resultType="org.qgm.entity.Student">
select * from student
</select>
</mapper>
最后书写java实现类
package org.qgm.entity;
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;
public class Test {
// 查询单个
public static void queryStudentByStuno() throws IOException {
// 将一个文件读入reader流中,变成一个对象
Reader reader = Resources.getResourceAsReader("conf.xml");
// 将reader对象变成sqlsession对象
SqlSessionFactory sqlsessionfactory = new SqlSessionFactoryBuilder().build(reader, "development");// 强制修改default的参数
// 从工厂中取出
SqlSession Session = sqlsessionfactory.openSession();
String statement = "org.qgm.entity.studentMapper.queryStudentBystuno";
// 由于之前在mapper中设置过了返回值对象,所以object对象即为student
Student student = Session.selectOne(statement, 1);
System.out.println(student);
Session.close();
}
// 查询全部学生
public static void queryAllStudentBystuno() throws IOException {
// 将一个文件读入reader流中,变成一个对象
Reader reader = Resources.getResourceAsReader("conf.xml");
// 将reader对象变成sqlsession对象
SqlSessionFactory sqlsessionfactory = new SqlSessionFactoryBuilder().build(reader, "development");// 强制修改default的参数
// 从工厂中取出
SqlSession Session = sqlsessionfactory.openSession();
String statement = "org.qgm.entity.studentMapper.queryAllStudent";
// 由于之前在mapper中设置过了返回值对象,所以object对象即为student
List<Student> student = Session.selectList(statement);
System.out.println(student);
Session.close();
}
//增加学生
public static void addStudent() throws IOException {
// 将一个文件读入reader流中,变成一个对象
Reader reader = Resources.getResourceAsReader("conf.xml");
// 将reader对象变成sqlsession对象
SqlSessionFactory sqlsessionfactory = new SqlSessionFactoryBuilder().build(reader, "development");// 强制修改default的参数
// 从工厂中取出
SqlSession Session = sqlsessionfactory.openSession();
String statement = "org.qgm.entity.studentMapper.addStudent";
// 由于之前在mapper中设置过了返回值对象,所以object对象即为student
Student student =new Student(5,"dqwsadd",8,"dadwddw");
int count =Session.insert(statement,student);//statement指定执行的sql,student:sql中需要的参数
// Mysql 不用 Session.commit();
System.out.println("增加"+count+"个学生");
Session.close();
}
//删除学生
public static void deleteStudentBystuNo() throws IOException {
// 将一个文件读入reader流中,变成一个对象
Reader reader = Resources.getResourceAsReader("conf.xml");
// 将reader对象变成sqlsession对象
SqlSessionFactory sqlsessionfactory = new SqlSessionFactoryBuilder().build(reader, "development");// 强制修改default的参数
// 从工厂中取出
SqlSession Session = sqlsessionfactory.openSession();
String statement = "org.qgm.entity.studentMapper.deleteStudentByStuno";
// 由于之前在mapper中设置过了返回值对象,所以object对象即为student
int count=Session.delete(statement,3);
System.out.println("删除第"+count+"人");
Session.close();
}
//修改
public static void updateStudentBystuNo() throws IOException {
// 将一个文件读入reader流中,变成一个对象
Reader reader = Resources.getResourceAsReader("conf.xml");
// 将reader对象变成sqlsession对象
SqlSessionFactory sqlsessionfactory = new SqlSessionFactoryBuilder().build(reader, "development");// 强制修改default的参数
// 从工厂中取出
SqlSession Session = sqlsessionfactory.openSession();
String statement = "org.qgm.entity.studentMapper.updataStudentByStuno";
// 由于之前在mapper中设置过了返回值对象,所以object对象即为student
Student student=new Student();
//修改谁
student.setStuNo(2);
//改成啥
student.setStuName("dassadd");
student.setStuAge(2318);
student.setGraName("dasdwddqw");
int count=Session.update(statement,student);
System.out.println("更新第"+count+"人");
Session.close();
}
public static void main(String[] args) throws IOException {
queryAllStudentBystuno();
updateStudentBystuNo();
//addStudent();
queryAllStudentBystuno();
}
}