昨天已经学习了一个简单的Mybatis的项目,今天我们来书写一个完整的增删改查的jdbc链接方式
Mybatis基础方式CRUD:
mybatis约定:
输入参数parameterType和输出参数resultType,在形式上都只能有一个
输入参数parameterType:
如果是简单类型(8个基本类型+String)是可以使用任何占位符,#{xxxx}
如果是对象类型,则必须是对象的属性#{属性名}
输出参数resultType:
如果返回值类型是一个对象(如Student),则无卵返回一个还是多个,在resultType都写成whpu.entity.Student即: resultType=“whpu.entity.Student”
注意事项:
如果使用的事务方式为JDBC,则需要手工commit提交,即执行sqlSession.commit();
所有的标签如< select >< update >等,都需要有sql语句,但是sql参数值可选
select * from student where stuNo=#{xxx}
sql有参数:session.insert(statement,参数值)
sql没有参数:session.insert(statement)
项目代码:
项目结构:
项目结构和昨天差不多
Student.java
package whpu.entity;
public class Student {
private int stuNo;
private String stuName;
private int age;
public Student() {
}
public Student(int stuNo, String stuName, int age) {
this.stuNo = stuNo;
this.stuName = stuName;
this.age = age;
}
public int getStuNo() {
return stuNo;
}
public void setStuNo(int stuNo) {
this.stuNo = stuNo;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString() {
return stuNo+","+stuName+","+age;
}
}
Test.java
import whpu.entity.Student;
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 java.io.IOException;
import java.io.Reader;
import java.util.List;
public class Test {
public static void queryStudentByNo(){
try {
Reader reader=Resources.getResourceAsReader( "conf.xml" );
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build( reader );
SqlSession sqlSession=sessionFactory.openSession();
String statement="whpu.entity.StudentMapper.queryStudentByNo";
Student student=sqlSession.selectOne( statement,1 );
System.out.println( student.toString() );
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void addStudent(){
try {
Reader reader=Resources.getResourceAsReader( "conf.xml" );
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build( reader );
SqlSession sqlSession=sessionFactory.openSession();
String statement="whpu.entity.StudentMapper.addStudent";
Student student=new Student( 4,"zl",6 );
int count=sqlSession.insert( statement,student );
System.out.println( "增加个数"+count );
sqlSession.commit();
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}public static void updatestudent(){
try {
Reader reader=Resources.getResourceAsReader( "conf.xml" );
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build( reader );
SqlSession sqlSession=sessionFactory.openSession();
String statement="whpu.entity.StudentMapper.updateStudent";
Student student=new Student(1,"zss",12);
int count=sqlSession.update( statement,student );
System.out.println( "修改个数:"+count );
sqlSession.commit();
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}public static void deleteStudentByStuNo(){
try {
Reader reader=Resources.getResourceAsReader( "conf.xml" );
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build( reader );
SqlSession sqlSession=sessionFactory.openSession();
String statement="whpu.entity.StudentMapper.deleteStudentByStuNo";
int count=sqlSession.delete( statement,4 );
System.out.println( "删除个数为:"+count );
sqlSession.commit();
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void queryAllStudents(){
try {
Reader reader=Resources.getResourceAsReader( "conf.xml" );
SqlSessionFactory sessionFactory=new SqlSessionFactoryBuilder().build( reader );
SqlSession sqlSession=sessionFactory.openSession();
String statement="whpu.entity.StudentMapper.queryAllStudents";
List<Student> students=sqlSession.selectList( statement );
for(Student student:students){
System.out.println( student.toString() );
}
sqlSession.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args){
// queryStudentByNo();
// addStudent();
// deleteStudentByStuNo();
updatestudent();
queryAllStudents();
}
}
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">
<configuration>
<environments default="development">
<environment id="development">
<!--事务提交方式:
JDBC:利用JDBC方式处理事务(commit rollback close)
MANAGED:将事务交由其他组件去托管(spring,jobss),默认会关闭连接
取消默认关闭:
<transactionManager type="JDBC"/>
<property name="closeConnection" value="false"/>
-->
<transactionManager type="JDBC"/>
<!--数据源类型:
POOLED:使用数据库连接池
UNPOOLED:使用传统的JDBC模式(每次访问数据库都需要打开和关闭)
JNDI:tomcat中获取内置的数据库连接池(数据库连接池-数据源)
-->
<dataSource type="POOLED">
<!--配置数据库信息-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/student?serverTimezone=UTC"/>
<property name="username" value="yucan"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<!--加载映射文件-->
<mapper resource="whpu/entity/StudentMapper.xml"/>
</mappers>
</configuration>
StudentMapper.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文件的唯一标识符-->
<mapper namespace="whpu.entity.StudentMapper">
<!--输入类型是int,返回是Student-->
<select id="queryStudentByNo" resultType="whpu.entity.Student" parameterType="int">
select * from student where stuNo = #{id}
</select>
<insert id="addStudent" parameterType="whpu.entity.Student" >
insert into student (stuNo,stuName,age) values(#{stuNo},#{stuName},#{age})
</insert>
<update id="updateStudent" parameterType="whpu.entity.Student">
update student set stuName=#{stuName},age=#{age} where stuNo=#{stuNo}
</update>
<delete id="deleteStudentByStuNo" parameterType="int">
delete from student where stuNo=#{stuNo}
</delete>
<select id="queryAllStudents" resultType="whpu.entity.Student">
select * from student
</select>
</mapper>