mybatis简介
mybatis学习网站
mybatis学习网站:https://mybatis.org/mybatis-3/zh/configuration.html
项目结构图
mybatis-config.xml
首先需要配置mybatis-config.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>
<!-- <settings>
<setting name="" value=""/>
</settings> -->
<!-- 需要在environments的上方 -->
<!-- <typeAliases>
<![CDATA[ 第一种取别名方法 ]]>
<typeAlias type="com.test.entity.Student" alias="Student"/> <![CDATA[ 可以取别名Student ]]>
<![CDATA[ 第二种取别名方法 ]]>
<package name="com.test.entity"/> <![CDATA[ 直接让Mybatis去扫描一个包,并将包下的所有类自动起别名(别名为首字母小写的类名)]]>
</typeAliases> -->
<typeAliases>
<typeAlias type="com.test.entity.Student" alias="Student"/>
<typeAlias type="com.test.entity.Teacher" alias="Teacher"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test"/>
<property name="username" value="root"/>
<property name="password" value="1234"/>
</dataSource>
</environment>
</environments>
<mappers>
<package name="com.test.mapper"/>
</mappers>
</configuration>
更改远程仓库地址
建议配置一下IDEA自带的Maven插件远程仓库地址,我们打开IDEA的安装目录,找到安装根目录/plugins/maven/lib/maven3/conf文件夹,找到settings.xml文件,以记事本打开,找到mirros标签,添加以下内容:
<mirror>
<id>nexus-aliyun</id>
<mirrorOf>*</mirrorOf>
<name>Nexus aliyun</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
这样,我们就将默认的远程仓库地址(国外),配置为国内的阿里云仓库地址了(依赖的下载速度就会快起来了)
数据库(test)表student、teacher、teach、users
student:
teacher:
teach:
users:
TestMapper.java
package com.test.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Arg;
import org.apache.ibatis.annotations.ConstructorArgs;
import org.apache.ibatis.annotations.Select;
import com.test.entity.Student;
public interface TestMapper {
List<Student> selectStudent();
List<Student> selectStudent1(String sid);
@ConstructorArgs({
@Arg(column = "sid", javaType = int.class), //指定构造方法
@Arg(column = "name", javaType = String.class)
})
@Select("select * from student where sid = #{sid} and sex = #{sex}")
@Select("select * from student where sid = #{sid} and sex = #{sex}")
Student getStudentBySidAndSex(@Param("sid")String sid, @Param("sex")String sex); //传入多个参数使用@Param
// 一对一
// @Select("select * from teacher inner join teach on teacher.tid=teach.tid where sid=#{sid}")
// Teacher getTeacherBySid(String sid);
//
// @Results({
// @Result(column = "sid", property = "sid"),
// @Result(column = "name", property = "name"),
// @Result(column = "sex", property = "sex"),
// @Result(column = "sid", property = "teacher", one=
// @One(select = "getTeacherBySid")
// ),
// })
// @Select("select * from student where sid=#{sid}")
// Student getStudentBySid(String sid);
/*一对多,一个老师对多个学生
@Select("select * from student inner join teach on student.sid = teach.sid where tid=#{tid}")
Student getStudentByTid(String tid);
@Results({
@Result(column = "tid", property = "tid"),
@Result(column = "name", property = "name"),
@Result(column = "sex", property = "sex"),
@Result(column = "tid", property = "studentList", many =
@Many(select = "getStudentBySid")
)
})
@Select("select * from teacher where tid=#{tid}")
Teacher getTeacherByTid(String tid);
*/
// int addStudent(Student student);
//
// int deleteStudent(String sid);
}
实体类
Student:
package com.test.entity;
import org.apache.ibatis.type.Alias;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;
@Data
@Accessors(chain = true)
//@Alias("stu") //可以取别名stu
public class Student {
private String sid;
private String name;
private String sex;
private Teacher teacher;
}
Teacher:
package com.test.entity;
import java.util.List;
import lombok.Data;
@Data
public class Teacher {
String tid;
String name;
String sex;
List<Student> studentList;
}
MybatisUtil.xml
由于SqlSessionFactory一般只需要创建一次,因此我们可以创建一个工具类来集中创建SqlSession,这样会更加方便一些:
package com.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class MybatisUtil {
public MybatisUtil() {
// TODO Auto-generated constructor stub
}
// 在类加载时就进行创建
private static SqlSessionFactory sqlSessionFactory;
static {
try {
sqlSessionFactory = new SqlSessionFactoryBuilder().build(new FileInputStream("mybatis-config.xml"));//可以加默认环境:build(new FileInputStream(".xml"), "环境..")
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取一个新的会话
*
* @param autoCommit 是否开启自动提交(跟JDBC是一样的,如果不自动提交,则会变成事务操作)
* @return SqlSession对象
*/
public static SqlSession getSession(boolean autoCommit) {
return sqlSessionFactory.openSession(autoCommit);
}
}
Main.java
package com.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
import org.apache.ibatis.io.ResolverUtil.Test;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.test.entity.Student;
import com.test.mapper.TestMapper;
public class Main {
public Main() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) throws FileNotFoundException {
// TODO Auto-generated method stub
try(SqlSession sqlSession = MybatisUtil.getSession(true)) {
TestMapper mapper = sqlSession.getMapper(TestMapper.class);
// mapper.selectStudent1("4").forEach(System.out::println);
// System.out.println(mapper.getTeacherByTid("1"));
// if (mapper.addStudent(new Student().setSid("1807020122").setName("小绿").setSex("女")) == 1) {
// System.out.println("插入成功!");
// } else {
// System.out.println("插入失败!");
// }
// mapper.selectStudent().forEach(System.out::println);
// if (mapper.deleteStudent("1807020111") == 1) {
// System.out.println("删除成功!");
// } else {
// System.out.println("删除失败!");
// }
// mapper.selectStudent().forEach(System.out::println);
}
}
}
使用过的jar包
mysql-connector-java-8.0.28-bin.jar、mybatis-3.5.9.jar、lombok.jar、(junit-4.13.2.jar、hamcrest-core-1.1.jar)