<?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="jdbc.properties"/>
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
<typeAliases>
<package name="com.powernode.mybatis.POJO"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<package name="com.powernode.mybatis.Mapper"/>
</mappers>
</configuration>
<?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="jdbc.properties"/>
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
<typeAliases>
<package name="com.powernode.mybatis.POJO"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<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>
<mappers>
<package name="com.powernode.mybatis.Mapper"/>
</mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.ibatis" level="TRACE">
</logger>
<logger name="java.sql.Connection" level="DEBUG">
</logger>
<logger name="java.sql.Statement" level="DEBUG">
</logger>
<logger name="java.sql.PreparedStatement" level="DEBUG">
</logger>
<!--日志级别,由低到高-->
<!--ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF-->
<root level="DEBUG">
<appender-ref ref="STDOUT">
</appender-ref>
<appender-ref ref="FILE">
</appender-ref>
</root>
</configuration>
<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="false">
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.apache.ibatis" level="TRACE">
</logger>
<logger name="java.sql.Connection" level="DEBUG">
</logger>
<logger name="java.sql.Statement" level="DEBUG">
</logger>
<logger name="java.sql.PreparedStatement" level="DEBUG">
</logger>
<!--日志级别,由低到高-->
<!--ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF-->
<root level="DEBUG">
<appender-ref ref="STDOUT">
</appender-ref>
<appender-ref ref="FILE">
</appender-ref>
</root>
</configuration>
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:13306/powernode
jdbc.username=root
jdbc.password=abc123
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:13306/powernode
jdbc.username=root
jdbc.password=abc123
<?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="com.powernode.mybatis.Mapper.StudentMapper">
<!-- parameterType的作用是告诉Mybatis框架我们的属性是什么类型,但是大部分情况下自动推断后我们就不用写了-->
<!-- parameterType其实可以写别名,Mybatis内置了很多别名-->
<select id="selectById" resultType="Student" parameterType="long">
select * from t_student where id = #{id,javaType=Long,jdbcType=BIGINT};
</select>
<select id="selectByName" resultType="Student" parameterType="String">
select * from t_student where name = #{name,javaType=String,jdbcType=VARCHAR};
</select>
<select id="selectByBirth" resultType="Student" parameterType="Date">
select * from t_student where birth = #{birth,javaType=Date,jdbcType=DATE};
</select>
<select id="selectBySex" resultType="Student" parameterType="Character">
select * from t_student where sex = #{sex,javaType=Character,jdbcType=CHAR}
</select>
<insert id="insertStudentsByMap">
insert into t_student(id,name,age,sex,birth,height) values(null,#{姓名},#{年龄},#{性别},#{生日},#{身高});
</insert>
<insert id="InsertStudentByPOJO" parameterType="com.powernode.mybatis.POJO.Student">
insert into t_student(id,name,age,sex,birth,height) values(null,#{name},#{age},#{sex},#{birth},#{height});
</insert>
<!-- 如果是多个参数,mybatis底层怎么做的,mybatis自动创建一个map集合,map.put("arg0",name),map.put("arg1",sex)-->
<!-- 填入的必须是arg加顺序或者param加顺序(param是从1开始的)-->
<select id="selectByNameAndSex" resultType="Student">
select * from t_student where name = #{arg0} and sex = #{param2};
</select>
<select id="selectByNameAndSex2" resultType="Student">
-- 一旦使用了@Param注解之后,arg标注就失效了,param还可以使用
select * from t_student where name = #{name} and sex = #{sex};
</select>
</mapper>
<?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="com.powernode.mybatis.Mapper.StudentMapper">
<!-- parameterType的作用是告诉Mybatis框架我们的属性是什么类型,但是大部分情况下自动推断后我们就不用写了-->
<!-- parameterType其实可以写别名,Mybatis内置了很多别名-->
<select id="selectById" resultType="Student" parameterType="long">
select * from t_student where id = #{id,javaType=Long,jdbcType=BIGINT};
</select>
<select id="selectByName" resultType="Student" parameterType="String">
select * from t_student where name = #{name,javaType=String,jdbcType=VARCHAR};
</select>
<select id="selectByBirth" resultType="Student" parameterType="Date">
select * from t_student where birth = #{birth,javaType=Date,jdbcType=DATE};
</select>
<select id="selectBySex" resultType="Student" parameterType="Character">
select * from t_student where sex = #{sex,javaType=Character,jdbcType=CHAR}
</select>
<insert id="insertStudentsByMap">
insert into t_student(id,name,age,sex,birth,height) values(null,#{姓名},#{年龄},#{性别},#{生日},#{身高});
</insert>
<insert id="InsertStudentByPOJO" parameterType="com.powernode.mybatis.POJO.Student">
insert into t_student(id,name,age,sex,birth,height) values(null,#{name},#{age},#{sex},#{birth},#{height});
</insert>
<!-- 如果是多个参数,mybatis底层怎么做的,mybatis自动创建一个map集合,map.put("arg0",name),map.put("arg1",sex)-->
<!-- 填入的必须是arg加顺序或者param加顺序(param是从1开始的)-->
<select id="selectByNameAndSex" resultType="Student">
select * from t_student where name = #{arg0} and sex = #{param2};
</select>
<select id="selectByNameAndSex2" resultType="Student">
-- 一旦使用了@Param注解之后,arg标注就失效了,param还可以使用
select * from t_student where name = #{name} and sex = #{sex};
</select>
</mapper>
package com.powernode.mybatis.Utils;
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;
public class SqlSessionUtil
{
private SqlSessionUtil(){};
private static SqlSessionFactory sqlSessionFactory;
private static ThreadLocal<SqlSession> local = new ThreadLocal<>();
static
{
try
{
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
public static SqlSession openSession()
{
SqlSession sqlSession = local.get();
if (sqlSession == null)
{
sqlSession = sqlSessionFactory.openSession();
local.set(sqlSession);
}
return sqlSession;
}
public static void close(SqlSession sqlSession)
{
if(sqlSession != null)
{
sqlSession.close();
local.remove();
}
}
}
package com.powernode.mybatis.Utils;
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;
public class SqlSessionUtil
{
private SqlSessionUtil(){};
private static SqlSessionFactory sqlSessionFactory;
private static ThreadLocal<SqlSession> local = new ThreadLocal<>();
static
{
try
{
sqlSessionFactory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
public static SqlSession openSession()
{
SqlSession sqlSession = local.get();
if (sqlSession == null)
{
sqlSession = sqlSessionFactory.openSession();
local.set(sqlSession);
}
return sqlSession;
}
public static void close(SqlSession sqlSession)
{
if(sqlSession != null)
{
sqlSession.close();
local.remove();
}
}
}
package com.powernode.mybatis.POJO;
import java.util.Date;
public class Student
{
private Long id;
private String name;
private Integer age;
private Double height;
private Date birth;
private Character sex;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", height=" + height +
", birth=" + birth +
", sex=" + sex +
'}';
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public Student() {
}
public Student(Long id, String name, Integer age, Double height, Date birth, Character sex) {
this.id = id;
this.name = name;
this.age = age;
this.height = height;
this.birth = birth;
this.sex = sex;
}
}
package com.powernode.mybatis.POJO;
import java.util.Date;
public class Student
{
private Long id;
private String name;
private Integer age;
private Double height;
private Date birth;
private Character sex;
@Override
public String toString() {
return "Student{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", height=" + height +
", birth=" + birth +
", sex=" + sex +
'}';
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public Double getHeight() {
return height;
}
public void setHeight(Double height) {
this.height = height;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public Character getSex() {
return sex;
}
public void setSex(Character sex) {
this.sex = sex;
}
public Student() {
}
public Student(Long id, String name, Integer age, Double height, Date birth, Character sex) {
this.id = id;
this.name = name;
this.age = age;
this.height = height;
this.birth = birth;
this.sex = sex;
}
}
package com.powernode.mybatis.Mapper;
import com.powernode.mybatis.POJO.Student;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface StudentMapper
{
// 只要制定了Param,底层实现就可以提示底层map框架怎么实现封装
List<Student> selectByNameAndSex2(@Param("name") String name,@Param("sex") Character sex);
List<Student> selectByNameAndSex(String name,Character sex);
//通过POJO保存学生信息
int InsertStudentByPOJO(Student student);
//通过Map保存学生信息
int insertStudentsByMap(Map<String, Object> map);
List<Student> selectById(Long id);
List<Student> selectByName(String name);
List<Student> selectByBirth(Date birth);
List<Student> selectBySex(Character sex);
}
package com.powernode.mybatis.Mapper;
import com.powernode.mybatis.POJO.Student;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface StudentMapper
{
// 只要制定了Param,底层实现就可以提示底层map框架怎么实现封装
List<Student> selectByNameAndSex2(@Param("name") String name,@Param("sex") Character sex);
List<Student> selectByNameAndSex(String name,Character sex);
//通过POJO保存学生信息
int InsertStudentByPOJO(Student student);
//通过Map保存学生信息
int insertStudentsByMap(Map<String, Object> map);
List<Student> selectById(Long id);
List<Student> selectByName(String name);
List<Student> selectByBirth(Date birth);
List<Student> selectBySex(Character sex);
}
package com.powernode.mybatis.Test;
import com.powernode.mybatis.Mapper.StudentMapper;
import com.powernode.mybatis.POJO.Student;
import com.powernode.mybatis.Utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test
{
@org.junit.Test
public void Test()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = mapper.selectById(1L);
students.forEach(student -> {
System.out.println(student);
});
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void TestSelect()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectByName("李四");
list.forEach(l ->{
System.out.println(l);
});
}
@org.junit.Test
public void TestDate() throws Exception
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date birth = simpleDateFormat.parse("2000-10-11");
List<Student> list = mapper.selectByBirth(birth);
list.forEach(l -> {
System.out.println(l);
});
}
@org.junit.Test
public void TestSEX()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectBySex('男');
list.forEach(te -> {
System.out.println(te);
});
}
@org.junit.Test
public void TestInsertMap() throws Exception
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("姓名","王五");
map.put("年龄",20);
map.put("身高",1.82);
map.put("性别",'男');
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse("2001-08-14");
map.put("生日",date);
mapper.insertStudentsByMap(map);
sqlSession.commit();
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void TestInsertByPOJO()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = new Student(null,"展会",20,1.8,new Date(),'女');
int i = mapper.InsertStudentByPOJO(student);
System.out.println(i);
sqlSession.commit();
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void selectByNameAndSex()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectByNameAndSex("张三",'男');
list.forEach(student -> {
System.out.println(student);
});
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void selectByNameAndSex1()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
//mapper实际指向代理对象,内存中生成的虚拟类
//selectByNameAndSex2使用的是代理方法
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectByNameAndSex2("张三",'男');
list.forEach(student -> {
System.out.println(student);
});
SqlSessionUtil.close(sqlSession);
}
}
package com.powernode.mybatis.Test;
import com.powernode.mybatis.Mapper.StudentMapper;
import com.powernode.mybatis.POJO.Student;
import com.powernode.mybatis.Utils.SqlSessionUtil;
import org.apache.ibatis.session.SqlSession;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Test
{
@org.junit.Test
public void Test()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> students = mapper.selectById(1L);
students.forEach(student -> {
System.out.println(student);
});
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void TestSelect()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectByName("李四");
list.forEach(l ->{
System.out.println(l);
});
}
@org.junit.Test
public void TestDate() throws Exception
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date birth = simpleDateFormat.parse("2000-10-11");
List<Student> list = mapper.selectByBirth(birth);
list.forEach(l -> {
System.out.println(l);
});
}
@org.junit.Test
public void TestSEX()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectBySex('男');
list.forEach(te -> {
System.out.println(te);
});
}
@org.junit.Test
public void TestInsertMap() throws Exception
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Map<String,Object> map = new HashMap<>();
map.put("姓名","王五");
map.put("年龄",20);
map.put("身高",1.82);
map.put("性别",'男');
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = simpleDateFormat.parse("2001-08-14");
map.put("生日",date);
mapper.insertStudentsByMap(map);
sqlSession.commit();
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void TestInsertByPOJO()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
Student student = new Student(null,"展会",20,1.8,new Date(),'女');
int i = mapper.InsertStudentByPOJO(student);
System.out.println(i);
sqlSession.commit();
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void selectByNameAndSex()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectByNameAndSex("张三",'男');
list.forEach(student -> {
System.out.println(student);
});
SqlSessionUtil.close(sqlSession);
}
@org.junit.Test
public void selectByNameAndSex1()
{
SqlSession sqlSession = SqlSessionUtil.openSession();
//mapper实际指向代理对象,内存中生成的虚拟类
//selectByNameAndSex2使用的是代理方法
StudentMapper mapper = sqlSession.getMapper(StudentMapper.class);
List<Student> list = mapper.selectByNameAndSex2("张三",'男');
list.forEach(student -> {
System.out.println(student);
});
SqlSessionUtil.close(sqlSession);
}
}