Mybatis(二)
1 Mybatis映射文件--增删改查
- POJO类
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
@Alias("emp")
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
'}';
}
}
- EmployeeMapper.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="cn.demo1.IEmployeeDAO">
<!--
namespace:命名空间 指定为接口的全类名
id:唯一标识 和接口中的方法名相同
resultType:返回值类型
-->
<select id="findById" parameterType="int" resultType="emp" databaseId="mysql">
select id,last_name,email,gender from employee where id = #{id}
</select>
<insert id="addEmployee" parameterType="cn.demo1.Employee">
insert into employee(last_name,email,gender) values (#{lastName},#{email},#{gender})
</insert>
<update id="updateEmployee" parameterType="cn.demo1.Employee">
update employee set last_name = #{lastName} ,email = #{email},gender = #{gender} where id = #{id}
</update>
<delete id="deleteEmployeeById" parameterType="java.lang.Integer">
delete from employee where id = #{id}
</delete>
</mapper>
- IEmployeeDAO
package cn.demo1;
public interface IEmployeeDAO {
public Employee findById(Integer id);
public void addEmployee(Employee employee);
public void updateEmployee(Employee employee);
public void deleteEmployeeById(Integer id);
}
- 配置文件--log4j.properties
### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### direct messages to file mylog.log ###
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=c\:mylog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
### set log levels - for more verbose logging change 'info' to 'debug' ###
log4j.rootLogger=debug, stdout
- 配置文件--db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis jdbc.user=root jdbc.password=root
- 配置文件--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>
<!--
Mybatis可以使用properties属性来引入外部properties配置文件内容
resource:引入类路径下的资源
url:引入网络路径或磁盘路径下的资源
-->
<properties resource="db.properties"></properties>
<settings>
<!--
是否开启自动驼峰规则映射,即如果数据表中的字段是last_name到Java中的lastName等类似的映射
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--
typeAliases:别名处理器,可以为Java类型起别名
-->
<typeAliases>
<!--
类很多情况下,可以批量设置别名这个包下的每一个类创建一个默认的别名,就是简单类名小写。
-->
<package name="cn.demo1"/>
</typeAliases>
<!--
environments ,Mybatis可以配置多种环境
environment,配置一个具体的环境信息,必须有两个标签,ID表示当前环境的唯一标识
transactionManager s事务管理器
type 事务管理器的类型
JDBC this.typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
MANAGER this.typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
dataSource
JNDI this.typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
POOLED this.typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
UNPOOLED this.typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
-->
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
</mappers>
</configuration>
- 测试类
package cn.test;
import cn.demo1.Employee;
import cn.demo1.IEmployeeDAO;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
/**
*
* 描述:
*/
public class MybatisTest {
/**
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = dao.findById(1);
System.out.print(employee);
session.close();
}
/**
* 测试增加
* @throws IOException
*/
@Test
public void demo2() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = new Employee();
employee.setLastName("呵呵");
employee.setGender("女");
employee.setEmail("aaa@aaa.com");
dao.addEmployee(employee);
session.commit();
session.close();
}
/**
* 测试修改
* @throws IOException
*/
@Test
public void demo3() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = new Employee();
employee.setId(1);
employee.setLastName("呵呵");
employee.setGender("女");
employee.setEmail("aaa@aaa.com");
dao.updateEmployee(employee);
session.commit();
session.close();
}
/**
* 测试修改
* @throws IOException
*/
@Test
public void demo4() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
dao.deleteEmployeeById(1);
session.commit();
session.close();
}
}
2. 主键生成方式
2.1 若数据库支持自动生成主键的字段(比如MySQL和SQLServer),则可以设置unGeneratedKeys="true",然后再把keyProperty设置到目标属性上。
<insert id="addEmployee" parameterType="cn.demo1.Employee" useGeneratedKeys="true" keyProperty="id">
insert into employee(last_name,email,gender) values (#{lastName},#{email},#{gender})
</insert>
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
@Alias("emp")
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
'}';
}
}
package cn.demo1;
public interface IEmployeeDAO {
public Employee findById(Integer id);
public void addEmployee(Employee employee);
public void updateEmployee(Employee employee);
public void deleteEmployeeById(Integer id);
}
<?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="cn.demo1.IEmployeeDAO">
<!--
namespace:命名空间 指定为接口的全类名
id:唯一标识 和接口中的方法名相同
resultType:返回值类型
-->
<select id="findById" parameterType="int" resultType="emp" databaseId="mysql">
select id,last_name,email,gender from employee where id = #{id}
</select>
<insert id="addEmployee" parameterType="cn.demo1.Employee" useGeneratedKeys="true" keyProperty="id">
insert into employee(last_name,email,gender) values (#{lastName},#{email},#{gender})
</insert>
<update id="updateEmployee" parameterType="cn.demo1.Employee">
update employee set last_name = #{lastName} ,email = #{email},gender = #{gender} where id = #{id}
</update>
<delete id="deleteEmployeeById" parameterType="java.lang.Integer">
delete from employee where id = #{id}
</delete>
</mapper>
<?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>
<!--
Mybatis可以使用properties属性来引入外部properties配置文件内容
resource:引入类路径下的资源
url:引入网络路径或磁盘路径下的资源
-->
<properties resource="db.properties"></properties>
<settings>
<!--
是否开启自动驼峰规则映射,即如果数据表中的字段是last_name到Java中的lastName等类似的映射
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<!--
typeAliases:别名处理器,可以为Java类型起别名
-->
<typeAliases>
<!--
类很多情况下,可以批量设置别名这个包下的每一个类创建一个默认的别名,就是简单类名小写。
-->
<package name="cn.demo1"/>
</typeAliases>
<!--
environments ,Mybatis可以配置多种环境
environment,配置一个具体的环境信息,必须有两个标签,ID表示当前环境的唯一标识
transactionManager s事务管理器
type 事务管理器的类型
JDBC this.typeAliasRegistry.registerAlias("JDBC", JdbcTransactionFactory.class);
MANAGER this.typeAliasRegistry.registerAlias("MANAGED", ManagedTransactionFactory.class);
dataSource
JNDI this.typeAliasRegistry.registerAlias("JNDI", JndiDataSourceFactory.class);
POOLED this.typeAliasRegistry.registerAlias("POOLED", PooledDataSourceFactory.class);
UNPOOLED this.typeAliasRegistry.registerAlias("UNPOOLED", UnpooledDataSourceFactory.class);
-->
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
</mappers>
</configuration>
/**
* 测试增加
* @throws IOException
*/
@Test
public void demo2() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = new Employee();
employee.setLastName("呵呵");
employee.setGender("女");
employee.setEmail("aaa@aaa.com");
dao.addEmployee(employee);
System.out.print(employee.getId());
session.commit();
session.close();
}
2.2 对于不支持自增主键的数据库,则可以使用selectKey子元素;selectKey元素将会首先运行,id会被设置,后插入语句会被调用。
<insert id="addEmployee" parameterType="cn.demo1.Employee" databaseId="oracle">
<selectKey order="BEFORE" keyProperty="id" resultType="java.lang.Integer">
select employee_seq.nextval from dual;
</selectKey>
insert into employee(id,last_name,email,gender) values (#{id},#{lastName},#{email},#{gender})
</insert>
3 参数传递
- 单个参数:
- 可以接受基本类型,对象类型,集合类型的值。这种情况可直接使用这个参数,不需要经过任何处理。
- 多个参数:
- 任意多个参数,都会被Mybatis重新包装成一个Map传入。Map的key是param1,param2,0,1...值就是参数的值。
- 命名参数:
- 为参数使用@param起一个名字,Mybatis就会将这些参数封装到map中,key就是我们自己指定的名字。
- POJO:
- 当这些参数属于业务的POJO的时候,我们直接传递POJO。#{属性值}中的属性值为POJO的属性值。
- Map:
- 我们也可以封装多个参数为map,直接传递。
- 注意:
- 如果是Collection类型的话,那么key是collection。
- 如果是List类型的话,那么key是list。
- 如果是数组的话,那么key是array。
- #{key}:获取参数的值,预编译到SQL中。安全。${key}:获取参数的值,拼接到SQL中,有SQL注入问题。
- #{}:更丰富的用法
- jdbcType:通常需要在某种特定的条件下设置
- 当我们使用的数据为null的时候,有些数据库不能识别mybatis对null的默认处理,比如Oracle。
- mybatis对所有的null默认映射的是OTHER,Oracle不支持。
- 解决方案:
- #{email,jdbcType=NULL}
- 在全局配置文件中配置jdbcTypeForNUll=NULL.
4. select元素
- select元素来定义查询操作。
- id:唯一标识符。
- 用来引用这条语句,需要和接口的方法名一致。
- parameterType:参数类型
- 可以不传,Mybatis会根据TypeHandler自动推断。
- resultType:返回值类型
- 别名或者全类名,如果返回的是集合,定义集合中元素的类型。不能和resultMap同时使用。
4.1 resultType:返回的是List集合
public List<Employee> findAll();
<select id="findAll" resultType="cn.demo1.Employee">
select * from employee
</select>
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
List<Employee> employees = dao.findAll();
System.out.print(employees);
session.close();
}
4.2 resultType:返回的是Map集合---返回的是一条记录
- 如果返回的是Map集合,那么Map集合的key是列名,而value是key对应的值
//key就是列名 值是对应的值
public Map<String,Object> findEmployeeById(Integer id);
<select id="findEmployeeById" resultType="map">
select * from employee where id = #{id}
</select>
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Map<String, Object> employee = dao.findEmployeeById(5);
System.out.print(employee);
session.close();
}
4.3 resultType:返回的是Map集合---返回的是多条记录
//key是这条记录的主键,value是记录封装后的JavaBean
@MapKey("id")
public Map<Integer,Employee> findEmployeeLikeName(String name);
<select id="findEmployeeLikeName" resultType="cn.demo1.Employee">
select * from Employee where last_name like '%${value}%'
</select>
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Map<Integer, Employee> map = dao.findEmployeeLikeName("呵");
System.out.print(map);
session.close();
}
4.4 resultMap--自定义结果映射规则
主要代码:
public Employee getEmployeeById(Integer id);
<!--
自定义某个Javabean的封装规则
type:自定义规则的Javabean
id:唯一id方便引用
-->
<resultMap id="emp" type="cn.demo1.Employee">
<!--
指定主键列的封装规则
id定义主键
cloumn 指定那一列
property:指定对应的Javabean属性
result定义普通列封装规则
-->
<id property="id" column="id"/>
<result column="last_name" property="lastName"></result>
<result column="gender" property="gender"></result>
<result column="email" property="email"></result>
</resultMap>
<select id="getEmployeeById" resultMap="emp">
select * from employee where id = #{id}
</select>
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = dao.getEmployeeById(5);
System.out.print(employee);
session.close();
}
全部代码:
- POJO
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"id=" + id +
", lastName='" + lastName + '\'' +
", gender='" + gender + '\'' +
", email='" + email + '\'' +
'}';
}
}
- 接口
package cn.demo1;
import org.apache.ibatis.annotations.MapKey;
import java.util.List;
import java.util.Map;
public interface IEmployeeDAO {
public Employee getEmployeeById(Integer id);
}
- 映射文件
<?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="cn.demo1.IEmployeeDAO">
<!--
自定义某个Javabean的封装规则
type:自定义规则的Javabean
id:唯一id方便引用
-->
<resultMap id="emp" type="cn.demo1.Employee">
<!--
指定主键列的封装规则
id定义主键
cloumn 指定那一列
property:指定对应的Javabean属性
result定义普通列封装规则
-->
<id property="id" column="id"/>
<result column="last_name" property="lastName"></result>
<result column="gender" property="gender"></result>
<result column="email" property="email"></result>
</resultMap>
<select id="getEmployeeById" resultMap="emp">
select * from employee where id = #{id}
</select>
</mapper>
- Mybatis的核心配置文件
<?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>
<!--
是否开启自动驼峰规则映射,即如果数据表中的字段是last_name到Java中的lastName等类似的映射
-->
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
</mappers>
</configuration>
- 测试
package cn.test;
import cn.demo1.Employee;
import cn.demo1.IEmployeeDAO;
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 org.junit.Test;
import sun.font.LayoutPathImpl;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
/**
*
* 描述:
*/
public class MybatisTest {
/**
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = dao.getEmployeeById(5);
System.out.print(employee);
session.close();
}
}
4.5 resultMap--关联查询--级联属性封装结果集
SQL:
CREATE DATABASE mybatis;
USER DATABASE mybatis;
CREATE TABLE employee(
id ) PRIMARY KEY AUTO_INCREMENT,
last_name ),
gender ),
email )
);
CREATE TABLE department(
id ) PRIMARY KEY AUTO_INCREMENT,
department_name )
)
);
ALTER TABLE employee ADD CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES department(id);
- POJO
package cn.demo1;
public class Department {
private Integer id;
private String departmentName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
@Override
public String toString() {
return "Department{" +
"id=" + id +
", departmentName='" + departmentName + '\'' +
'}';
}
}
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
private Department department;
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"email='" + email + '\'' +
", gender='" + gender + '\'' +
", lastName='" + lastName + '\'' +
", id=" + id +
'}';
}
}
- 映射文件 -- EmployeeMapper.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="cn.demo1.IEmployeeDAO">
<resultMap id="mybatis" type="cn.demo1.Employee">
<id property="id" column="id"/>
<result property="lastName" column="last_name"/>
<result property="email" column="email"/>
<result property="gender" column="gender"/>
<result property="department.id" column="dept_id"/>
<result property="department.departmentName" column="department_name"/>
</resultMap>
<select id="getEmployeeAndDepartmentById" resultMap="mybatis">
SELECT e.id id,e.last_name last_name ,e.email email,e.gender gender,e.dept_id dept_id ,d.department_name department_name FROM employee e , department d WHERE e.dept_id = d.id AND e.id = #{id} ;
</select>
</mapper>
- 接口--IEmployeeDAO
package cn.demo1;
import org.apache.ibatis.annotations.MapKey;
import java.util.List;
import java.util.Map;
public interface IEmployeeDAO {
public Employee getEmployeeAndDepartmentById(Integer id);
}
- db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8 jdbc.user=root jdbc.password=root
- Mybatis核心配置文件
<?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>
<!–
是否开启自动驼峰规则映射,即如果数据表中的字段是last_name到Java中的lastName等类似的映射
–>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>-->
<properties resource="db.properties"/>
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>-->
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
</mappers>
</configuration>
- 测试
package cn.test;
import cn.demo1.Employee;
import cn.demo1.IEmployeeDAO;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
/**
*
* 描述:
*/
public class MybatisTest {
/**
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = dao.getEmployeeAndDepartmentById(6);
System.out.print(employee);
System.out.print(employee.getDepartment());
session.close();
}
}
4.6 resultMap--关联查询--association定义关联对象的封装规则
<resultMap id="mybatis2" type="cn.demo1.Employee">
<id property="id" column="id"/>
<result property="lastName" column="last_name"/>
<result property="email" column="email"/>
<result property="gender" column="gender"/>
<!--
association可以指定联合的JavaBean对象
property:指定那个属性是联合对象
javaType:指定这个属性对象的类型
-->
<association property="department" javaType="cn.demo1.Department">
<id column="dept_id" property="id"/>
<result column="department_name" property="departmentName"/>
</association>
</resultMap>
4.6 resultMap--关联查询--association进行分布查询
- POJO
package cn.demo1;
public class Department {
private Integer id;
private String departmentName;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
@Override
public String toString() {
return "Department{" +
"id=" + id +
", departmentName='" + departmentName + '\'' +
'}';
}
}
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
private Department department;
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"email='" + email + '\'' +
", gender='" + gender + '\'' +
", lastName='" + lastName + '\'' +
", id=" + id +
'}';
}
}
- 接口
package cn.demo1;
public interface IDepartmentDAO {
public Department getDepartmentById(Integer id);
}
package cn.demo1;
import org.apache.ibatis.annotations.MapKey;
import java.util.List;
import java.util.Map;
public interface IEmployeeDAO {
public Employee getEmployeeByStep(Integer id);
}
- 映射文件--DepartmentMapper.xml和EmployeeMapper.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="cn.demo1.IDepartmentDAO">
<resultMap id="department" type="cn.demo1.Department">
<id column="id" property="id"></id>
<result column="department_name" property="departmentName"/>
</resultMap>
<select id="getDepartmentById" resultMap="department">
select id ,department_name from department where id = #{id}
</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="cn.demo1.IEmployeeDAO">
<!--
使用association进行分布查询
先按照员工Id查询员工信息
根据员工信息中的dept_id的值去部门表查询部门信息
将部门设置到员工中
-->
<resultMap id="emp" type="cn.demo1.Employee">
<id property="id" column="id"/>
<result property="lastName" column="last_name"/>
<result property="email" column="email"/>
<result property="gender" column="gender"/>
<!--
定义关联对象的封装规则
-->
<association property="department" select="cn.demo1.IDepartmentDAO.getDepartmentById" column="dept_id">
</association>
</resultMap>
<select id="getEmployeeByStep" resultMap="emp">
select id,last_name,email,gender,dept_id from employee where id = #{id}
</select>
</mapper>
- db.properties
jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf8 jdbc.user=root jdbc.password=root
- 核心配置文件
<?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>
<!–
是否开启自动驼峰规则映射,即如果数据表中的字段是last_name到Java中的lastName等类似的映射
–>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>-->
<properties resource="db.properties"/>
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>-->
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
<mapper resource="cn/demo1/DepartmentMapper.xml"/>
</mappers>
</configuration>
- 测试类
package cn.test;
import cn.demo1.Employee;
import cn.demo1.IEmployeeDAO;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
/**
*
* 描述:
*/
public class MybatisTest {
/**
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IEmployeeDAO dao = session.getMapper(IEmployeeDAO.class);
Employee employee = dao.getEmployeeByStep(6);
System.out.print(employee);
System.out.print(employee.getDepartment());
session.close();
}
}
4.6 resultMap--关联查询--association进行分布查询及延迟加载
- 开启延迟加载和属性按需加载
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
4.7 resultMap--关联查询--collection定义关联集合封装规则
- POJO
package cn.demo1;
import java.util.List;
public class Department {
private Integer id;
private String departmentName;
private List<Employee> emps;
public List<Employee> getEmps() {
return emps;
}
public void setEmps(List<Employee> emps) {
this.emps = emps;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
@Override
public String toString() {
return "Department{" +
"id=" + id +
", departmentName='" + departmentName + '\'' +
'}';
}
}
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
private Department department;
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"email='" + email + '\'' +
", gender='" + gender + '\'' +
", lastName='" + lastName + '\'' +
", id=" + id +
'}';
}
}
- 接口
package cn.demo1;
public interface IDepartmentDAO {
public Department getDepartmentAndEmployeeById(Integer id);
}
- 映射文件
<?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="cn.demo1.IDepartmentDAO">
<resultMap id="department" type="cn.demo1.Department">
<id column="id" property="id"></id>
<result column="department_name" property="departmentName"/>
<!--
collection定义关联集合类型的属性的封装规则
ofType:指定集合里面元素的类型
-->
<collection property="emps" ofType="cn.demo1.Employee">
<id column="eid" property="id"/>
<result column="last_name" property="lastName"/>
<result column="email" property="email"/>
<result column="gender" property="gender"/>
</collection>
</resultMap>
<select id="getDepartmentAndEmployeeById" resultMap="department">
SELECT e.id eid,e.last_name last_name ,e.email email,e.gender gender,d.id id ,d.department_name department_name FROM employee e , department d WHERE e.dept_id = d.id AND d.id = #{id}
</select>
</mapper>
- 核心配置文件
<?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="db.properties"/>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>-->
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
<mapper resource="cn/demo1/DepartmentMapper.xml"/>
</mappers>
</configuration>
- 测试
package cn.test;
import cn.demo1.Department;
import cn.demo1.Employee;
import cn.demo1.IDepartmentDAO;
import cn.demo1.IEmployeeDAO;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
/**
*
* 描述:
*/
public class MybatisTest {
/**
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IDepartmentDAO dao = session.getMapper(IDepartmentDAO.class);
Department department = dao.getDepartmentAndEmployeeById(1);
System.out.print(department);
System.out.print(department.getEmps());
session.close();
}
}
4.7 resultMap--关联查询--collection进行分布查询
- POJO
package cn.demo1;
import java.util.List;
public class Department {
private Integer id;
private String departmentName;
private List<Employee> emps;
public List<Employee> getEmps() {
return emps;
}
public void setEmps(List<Employee> emps) {
this.emps = emps;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
@Override
public String toString() {
return "Department{" +
"id=" + id +
", departmentName='" + departmentName + '\'' +
'}';
}
}
package cn.demo1;
import org.apache.ibatis.type.Alias;
/**
* 描述:POJO
*/
public class Employee {
private Integer id;
private String lastName;
private String gender;
private String email;
private Department department;
public Department getDepartment() {
return department;
}
public void setDepartment(Department department) {
this.department = department;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Employee{" +
"email='" + email + '\'' +
", gender='" + gender + '\'' +
", lastName='" + lastName + '\'' +
", id=" + id +
'}';
}
}
- 接口
package cn.demo1;
public interface IDepartmentDAO {
public Department getDepartmentByIdStep(Integer id);
}
package cn.demo1;
import org.apache.ibatis.annotations.MapKey;
import java.util.List;
import java.util.Map;
public interface IEmployeeDAO {
public List<Employee> getEmployeesByDeptId(Integer id);
}
- 映射文件
<?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="cn.demo1.IEmployeeDAO">
<resultMap id="emp" type="cn.demo1.Employee">
<id property="id" column="id"/>
<result property="lastName" column="last_name"/>
<result property="email" column="email"/>
<result property="gender" column="gender"/>
</resultMap>
<select id="getEmployeesByDeptId" resultMap="emp">
select * from employee where dept_id = #{id}
</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="cn.demo1.IDepartmentDAO">
<resultMap id="department" type="cn.demo1.Department">
<id column="id" property="id"></id>
<result column="department_name" property="departmentName"/>
<collection property="emps" select="cn.demo1.IEmployeeDAO.getEmployeesByDeptId" column="id"/>
</resultMap>
<select id="getDepartmentByIdStep" resultMap="department" >
select id,department_name from department where id = #{id}
</select>
</mapper>
- 核心配置文件
<?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="db.properties"/>
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<environments default="mysql_development">
<environment id="mysql_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
<!--<environment id="oracle_development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${oracle.driver}"/>
<property name="url" value="${oracle.url}"/>
<property name="username" value="${oracle.user}"/>
<property name="password" value="${oracle.password}"/>
</dataSource>
</environment>-->
</environments>
<databaseIdProvider type="DB_VENDOR">
<property name="MySQL" value="mysql"/>
<property name="Oracle" value="oracle"/>
<property name="SQL Server" value="sqlserver"/>
</databaseIdProvider>
<mappers>
<mapper resource="cn/demo1/EmployeeMapper.xml"/>
<mapper resource="cn/demo1/DepartmentMapper.xml"/>
</mappers>
</configuration>
- 测试
package cn.test;
import cn.demo1.Department;
import cn.demo1.Employee;
import cn.demo1.IDepartmentDAO;
import cn.demo1.IEmployeeDAO;
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 org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
/**
*
* 描述:
*/
public class MybatisTest {
/**
* 测试查询
* @throws IOException
*/
@Test
public void demo1() throws IOException {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
IDepartmentDAO dao = session.getMapper(IDepartmentDAO.class);
Department department = dao.getDepartmentByIdStep(1);
System.out.print(department);
System.out.print(department.getEmps());
session.close();
}
}
Mybatis(二)的更多相关文章
- mybatis(二)执行CRUD操作的两种方式配置和注解
一.使用MyBatis对表执行CRUD操作——基于XML的实现 1.定义sql映射xml文件 userMapper.xml文件的内容如下: <?xml version="1.0&quo ...
- 框架学习笔记之Mybatis(二)
一.动态sql 通过mybatis提供的标签,实现sql语句的拼接. 1.where <select id="findUserList" parameterType=&quo ...
- Mybatis(二)入门程序-通过id查找用户、模糊查找用户、添加用户、删除用户
根据下图myBatis的架构,创建一个使用MyBatis的工程. 一.配置MyBatis 环境(如图) 1.sqlMapConfig.xml 首先,导入jar包(上图右边)并加载路径,然后 ...
- Mybatis(二) 全局配置文件详解
这节来说说全局配置文件的东西,非常简单.看一遍就懂了. --WH 一.全部配置内容 SqlMapConfig.xml的配置内容和顺序如下,顺序不能乱.现在来对这些属性的意思一一进行讲解. 二.prop ...
- Mybatis二(高级部分)
1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If标签 b) Where标签 c) Sql片 ...
- mybatis二(参数处理和map封装及自定义resultMap)
.单个参数 mybatis不会做特殊处理. #{参数名/任意名}:取出参数值. .多个参数 mybatis会做特殊处理. 多个参数会被封装成 一个map. key:param1...paramN,或者 ...
- 框架应用:Mybatis(二) - 动态SQL
MybatisUtil工具类 在实际开发中,我们可以编写一个MybatisUtil辅助类来进行对进行操作. 1)在静态初始化块中加载mybatis配置文件和StudentMapper.xml文件一次 ...
- MyBatis(二):Select语句传递参数的集中方案
从别人说的方案中看出,传递参数方案还挺多,不如自己整理下,以便以后使用过程中有个笔记回忆录. 1.传递一个参数的用法: 配置文件 <select id="getById" r ...
- 初识mybatis(二)
上篇博客我们介绍通过Java代码来创建mybatis的配置文件,港真,这种方式看起来有意思实际在开发中用的并不多,mybatis的配置还是以xml配置为主,本文我们就来看看如何通过xml文件来配置my ...
- mybatis(二)
一级缓存和二级缓存 mybatis一二级缓存测试实例: package com.atguigu.mybatis.test; import java.io.IOException; import jav ...
随机推荐
- 由于IPv6导致的iOS应用发布失败,是否该怪Azure?
IPv6已经被越来越广泛的支持了,尤其是苹果强制要求iOS (确切的说是iOS 9以及后续版本)应用必须支持IPv6之后(官方宣布),更将进一步推动IPv6的使用. 不过苹果应用作为客户端强制要求IP ...
- JavaScript 原型与继承机制详解
引言 初识 JavaScript 对象的时候,我以为 JS 是没有继承这种说法的,虽说 JS 是一门面向对象语言,可是面向对象的一些特性在 JS 中并不存在(比如多态,不过严格来说也没有继承).这就困 ...
- (转载)基于Bash命令行的百度云上传下载工具
原文链接:http://hi.baidu.com/meoow/item/aef5814bbd5be3e1bcf451e9 这是我根据百度云PCS的API写的一个基于bash的命令行工具, 使用了cur ...
- String.valueOf() 方法的使用
1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 ...
- (cljs/run-at (JSVM. :all) "Metadata就这样哦")
前言 动态类型语言,少了静态类型语言必须声明变量类型的累赘,但也缺失了编译时类型检查和编译时优化的好处.cljs虽然作为动态类型语言,但其提供Metadata让我们在必要的时候可选择地补充类型提示, ...
- 一大波jQuery事件即将来袭!
一.jQuery事件 1.focus()元素获得焦点 2.blur()元素失去焦点 3.change() 表单元素的值发生变化(可用于验证用户名是否存在) 4.click() 鼠标单击 5.dbcli ...
- localStorage和sessionStorage的使用方法和一些特性介绍
本文主要介绍的是localStorage和sessionStorage的使用方法和一些特性,以及一些其他的存储方式的比较. 客服端存储方案包括以下几种: 1.Cookie 2.Us ...
- shell统计文本中单词的出现次数
Ubuntu14.04 给定一个文本,统计其中单词出现的次数 方法1 # solution 1 grep与awk配合使用,写成一个sh脚本 fre.sh sh fre.sh wordfretest.t ...
- Python基础之字符编码
前言 字符编码非常容易出问题,我们要牢记几句话: 1.用什么编码保存的,就要用什么编码打开 2.程序的执行,是先将文件读入内存中 3.unicode是父编码,只能encode解码成其他编码格式 utf ...
- bash脚本的特性01
1.bash特性之多命令执行 read -p "please enter a passwd for $name ,[passwd]: " password [ -z "$ ...