MySQL创建表

DROP TABLE IF EXISTS `tb_employee`;
CREATE TABLE `tb_employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`loginname` varchar(18) DEFAULT NULL,
`PASSWORD` varchar(18) DEFAULT NULL,
`NAME` varchar(18) DEFAULT NULL,
`SEX` char(2) DEFAULT NULL,
`AGE` int(11) DEFAULT NULL,
`phone` varchar(21) DEFAULT NULL,
`sal` double DEFAULT NULL,
`state` varchar(18) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
-- ----------------------------
INSERT INTO `tb_employee` VALUES ('1', 'jack', '123456', '杰克', '男', '45', '15315153531', '13252', 'ACTIVE');
INSERT INTO `tb_employee` VALUES ('2', 'rose', '123456', '露丝', '女', '23', '1510223426', '33261', 'ACTIVE');
INSERT INTO `tb_employee` VALUES ('3', 'tom', '123456', '汤姆', '男', '36', '156556486', '8541', 'ACTIVE');
INSERT INTO `tb_employee` VALUES ('4', 'alice', '123456', '爱丽丝', '女', '18', '1565563486', '4631', 'ACTIVE');

MyBatis连接MySQL部分

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=root
password=mysql

mybatis-config.xml

  <!--  XML 配置文件包含对 MyBatis 系统的核心设置 -->
<configuration>
<properties resource="db.properties"/>
<!-- 指定 MyBatis 所用日志的具体实现 -->
<settings>
<setting name="logImpl" value="LOG4J"/>
<!-- 要使延迟加载生效必须配置下面两个属性 -->
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
<environments default="mysql">
<!-- 环境配置,即连接的数据库。 -->
<environment id="mysql">
<!-- 指定事务管理类型,type="JDBC"指直接简单使用了JDBC的提交和回滚设置 -->
<transactionManager type="JDBC"/>
<!-- dataSource指数据源配置,POOLED是JDBC连接对象的数据源连接池的实现。 -->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- mappers告诉了MyBatis去哪里找持久化类的映射文件 -->
<mappers>
<mapper class="org.fkit.mapper.EmployeeMapper"/>
</mappers>
</configuration>

log4j.properties

log4j.rootLogger=ERROR, stdout
log4j.logger.org.fkit.mapper.EmployeeMapper=DEBUG
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

实现映射类

public class Employee implements Serializable {

	private Integer id;			 // 主键id
private String loginname; // 登录名
private String password; // 密码
private String name; // 真实姓名
private String sex; // 性别
private Integer age; // 年龄
private String phone; // 电话
private Double sal; // 薪水
private String state; // 状态 public Employee() {
super();
// TODO Auto-generated constructor stub
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLoginname() {
return loginname;
}
public void setLoginname(String loginname) {
this.loginname = loginname;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Double getSal() {
return sal;
}
public void setSal(Double sal) {
this.sal = sal;
}
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
@Override
public String toString() {
return "Employee [id=" + id + ", loginname=" + loginname
+ ", password=" + password + ", name=" + name + ", sex=" + sex
+ ", age=" + age + ", phone=" + phone + ", sal=" + sal
+ ", state=" + state + "]";
}
}

编写连接数据库的xml文件,和log4j.properties

实现这些类和接口

获取SqlSessionFactory和SQLSession

public class FKSqlSessionFactory {
private static SqlSessionFactory sqlSessionFactory=null;
static{
try {
InputStream inputStream=Resources.getResourceAsStream("mybatis-config.xml");
sqlSessionFactory=new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static SqlSession getSqlSession(){
return sqlSessionFactory.openSession();
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}

实现方法接口

public interface EmployeeMapper {
@SelectProvider(type=EmployeeDynaSqlProvider.class,method="selectWhitParam")
List<Employee> selectWhitParam(Map<String, Object> params); @InsertProvider(type=EmployeeDynaSqlProvider.class,method="insertEmployee")
@Options(useGeneratedKeys=true,keyProperty="id")
int insertEmployee(Employee emp); @SelectProvider(type=EmployeeDynaSqlProvider.class,method="selectWhitById")
Employee selectWhitById(Map<String, Object> params); @UpdateProvider(type=EmployeeDynaSqlProvider.class,method="updateEmployee")
void updateEmployee(Employee emp);
@DeleteProvider(type=EmployeeDynaSqlProvider.class,method="deleteEMployee")
void deleteEMployee(Map<String, Object> params);
}

实现动态SQL类

public class EmployeeDynaSqlProvider {
/**
* 查询数据
* @param param 查询条件
* @return sql
*/
public String selectWhitParam(final Map<String, Object> param){
return new SQL(){
{
SELECT ("*");
FROM ("tb_employee");
if (param.get("id")!=null) {
WHERE ("id=#{id}");
}
if (param.get("loginname")!=null) {
WHERE ("loginname=#{loginname}");
}
if (param.get("password")!=null) {
WHERE ("PASSWORD=#{password}");
}
if (param.get("name")!=null) {
WHERE ("name=#{name}");
}
if (param.get("sex")!=null) {
WHERE ("sex=#{sex}");
}
if (param.get("age")!=null) {
WHERE ("age=#{age}");
}
if (param.get("sal")!=null) {
WHERE ("sal=#{sal}");
}
if (param.get("state")!=null) {
WHERE ("state=#{state}");
}
if (param.get("id")!=null) {
WHERE ("id=#{id}");
}
}
}.toString();
}
/**
* 插入数据
* @param emp 员工对象
* @return sql
*/
public String insertEmployee(final Employee emp){
return new SQL(){
{
INSERT_INTO("tb_employee");
if (emp.getLoginname()!=null) {
VALUES("loginname","#{loginname}");
}
if (emp.getPassword()!=null) {
VALUES("PASSWORD","#{password}");
}
if (emp.getName()!=null) {
VALUES("name","#{name}");
}
if (emp.getSex()!=null) {
VALUES("sex","#{sex}");
}
if (emp.getAge()!=null) {
VALUES("age","#{age}");
}
if (emp.getSal()!=null) {
VALUES("sal","#{sal}");
}
if (emp.getState()!=null) {
VALUES("state","#{state}");
}
if (emp.getPhone()!=null) {
VALUES("phone","#{phone}");
}
}
}.toString();
}
/**
* 查询员工
* @param param 传入参数
* @return SQL
*/
public String selectWhitById(final Map<String, Object> param){
return new SQL(){
{
SELECT ("*");
FROM ("tb_employee");
if (param.get("id")!=null) {
WHERE ("id=#{id}");
}
if (param.get("loginname")!=null) {
WHERE ("loginname=#{loginname}");
}
if (param.get("password")!=null) {
WHERE ("PASSWORD=#{password}");
}
if (param.get("name")!=null) {
WHERE ("name=#{name}");
}
if (param.get("sex")!=null) {
WHERE ("sex=#{sex}");
}
if (param.get("age")!=null) {
WHERE ("age=#{age}");
}
if (param.get("sal")!=null) {
WHERE ("sal=#{sal}");
}
if (param.get("state")!=null) {
WHERE ("state=#{state}");
}
if (param.get("id")!=null) {
WHERE ("id=#{id}");
}
}
}.toString();
}
/**
* 修改信息
* @param emp 员工对象
* @return SQL
*/
public String updateEmployee(final Employee emp){
return new SQL(){
{
UPDATE("tb_employee");
if (emp.getLoginname()!=null) {
SET ("loginname = #{loginname}");
}
if (emp.getPassword()!=null) {
SET ("password = #{password}");
}
if (emp.getName()!=null) {
SET ("name = #{name}");
}
if (emp.getSex()!=null) {
SET ("sex = #{sex}");
}
if (emp.getAge()!=null) {
SET ("age = #{age}");
}
if (emp.getPhone()!=null) {
SET ("phone = #{phone}");
}
if (emp.getSal()!=null) {
SET ("sal = #{sal}");
}
if (emp.getState()!=null) {
SET ("state = #{state}");
}
WHERE("id=#{id}");
}
}.toString();
} /**
* 删除数据
* @param param 传入参数
* @return sql
*/
public String deleteEMployee(final Map<String, Object> param){
return new SQL(){
{
DELETE_FROM("tb_employee");
if (param.get("id")!=null) {
WHERE("id = #{id}");
}
if (param.get("loginname")!=null) {
WHERE("loginname = #{loginname}");
}
if (param.get("password")!=null) {
WHERE("password = #{password}");
}
if (param.get("name")!=null) {
WHERE("name = #{name}");
}
if (param.get("id")!=null) {
WHERE("id = #{id}");
}
if (param.get("sex")!=null) {
WHERE("sex = #{sex}");
}
if (param.get("age")!=null) {
WHERE("age = #{age}");
}
if (param.get("phone")!=null) {
WHERE("phone = #{phone}");
}
if (param.get("sal")!=null) {
WHERE("sal = #{sal}");
}
if (param.get("state")!=null) {
WHERE("state = #{state}");
}
}
}.toString();
}
}

测试类

public class DynamicSQLTest {

	public static void main(String[] args) throws Exception {
SqlSession session=FKSqlSessionFactory.getSqlSession();
DynamicSQLTest dy=new DynamicSQLTest();
EmployeeMapper emp=session.getMapper(EmployeeMapper.class);
//执行查询
//dy.selectWhitParamTest(emp);
//执行插入
//dy.insertEmployee(emp);
//执行修改
//dy.updateEmployee(emp);
//执行删除
dy.deleteEMployee(emp);
//提交,关闭
session.commit();
session.close();
}
public void selectWhitParamTest(EmployeeMapper emp){
//使用MAP装载参数
Map<String,Object> param=new HashMap<String, Object>();
param.put("loginname", "jack");
param.put("password","123456");
List<Employee> list=emp.selectWhitParam(param);
System.out.println(list);
}
/**
* 插入数据
* @param empmapper
*/
public void insertEmployee(EmployeeMapper empmapper){
Employee emp=new Employee();
emp.setLoginname("angle");
emp.setPassword("123456");
emp.setSex("女");
emp.setAge(24);
emp.setPhone("1534689512");
emp.setSal(1000.2);
//emp.setState("ACTIVE");
empmapper.insertEmployee(emp);
System.out.println("插入成功,返回id:"+emp.getId());
}
public void updateEmployee(EmployeeMapper empMapper){
Map<String, Object> param=new HashMap<String, Object>();
param.put("id", 5);
Employee emp=empMapper.selectWhitById(param);
emp.setLoginname("angelBaby");
emp.setName("丽丽");
emp.setState("ACTIVE");
emp.setPhone("15102645895");
empMapper.updateEmployee(emp);
}
public void deleteEMployee(EmployeeMapper empMapper){
Map<String, Object> param=new HashMap<String, Object>();
param.put("loginname","angelBaby");
param.put("password", "123456");
empMapper.deleteEMployee(param);
}
}

MyBatis注解配置动态SQL的更多相关文章

  1. MyBatis 注解使用动态SQL

    使用MyBatis很长时间了,一直使用的是XML配置的 SQL,刚好在上一个项目中尝试使用注解方式开发,主要是由于XML配置过于繁琐,注解可以直接写在Mapper函数上,更加的方便一些. 在注解上不能 ...

  2. MyBatis注解及动态Sql

    一.注解实现MyBatis配置 java注解是在jdk1.5版本之后开始加入的,不得不说注解对于我们开发人员来说是个很方便的东西,实现起来也非常的简单,下边我们说一下在MyBatis中使用注解来替换M ...

  3. mybatis注解开发-动态SQL

    实体类以及表结构 在mybatis-config.xml中注册mapper接口 -------------------------- 动态查询@SelectProvider EmployeeMappe ...

  4. Mybatis之注解实现动态sql

    通过注解实现动态sql一共需要三部:1.创建表,2.创建entity类,3.创建mapper类, 4.创建动态sql的Provider类.1.和2.可以参见该系列其他文章,这里主要对3和4进行演示,并 ...

  5. 【mybatis深度历险系列】mybatis中的动态sql

    最近一直做项目,博文很长时间没有更新了,今天抽空,学习了一下mybatis,并且总结一下.在前面的博文中,小编主要简单的介绍了mybatis中的输入和输出映射,并且通过demo简单的介绍了输入映射和输 ...

  6. mybatis中的动态SQL

    在实际开发中,数据库的查询很难一蹴而就,我们往往要根据各种不同的场景拼接出不同的SQL语句,这无疑是一项复杂的工作,我们在使用mybatis时,mybatis给我们提供了动态SQL,可以让我们根据具体 ...

  7. mybatis第二天——动态SQL与关联查询

    大纲摘要: 1.输入映射和输出映射 a) 输入参数映射 b) 返回值映射 2.动态sql a) If b) Where c) Foreach d) Sql片段 3.关联查询 a) 一对一关联 b) 一 ...

  8. Mybatis入门之动态sql

    Mybatis入门之动态sql 通过mybatis提供的各种标签方法实现动态拼接sql. 1.if.where.sql.include标签(条件.sql片段) <sql id="sel ...

  9. mybatis 详解------动态SQL

    mybatis 详解------动态SQL   目录 1.动态SQL:if 语句 2.动态SQL:if+where 语句 3.动态SQL:if+set 语句 4.动态SQL:choose(when,o ...

随机推荐

  1. opensessioninviewFilter导致org.hibernate.NonUniqueObjectException

    起因: 公司业务需求,增加了一个新的数据源,增加之后,起初一切正常,但是发现后台管理系统所有Ajax请求获取信息没有问题,但是涉及到保存操作就抛出异常. 异常: org.hibernate.NonUn ...

  2. 数据库笔试面试题库(Oracle、MySQL等)

    数据库笔试面试题库(Oracle.MySQL等) 版权声明:版权所有,欢迎分享本文,转载请保留出处,否则追究法律责任,谢谢合作. 注:本文将持续更新,可关注作者微信公众号以便获得最新笔试面试资料. ⊙ ...

  3. Python 3中字符串可以被改变吗?

    Python 3中字符串可以被改变吗? 字符串有改变这个方法的:replace,比如: a = 'lkjhgfdsa' a.replace(') '123kjhgfdsa' #返回结果 从上面这个例子 ...

  4. ThinkPhp框架:父类及表单验证

    这个知识点,就可以通过"登录"和"注册"的页面来学习这个知识点了首先先做一个"登录"功能一.登录功能(父类)(1)登录的控制器在我的控制器文 ...

  5. CAAnimation动画--(旋转/缩放/移动/闪烁)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #1d9421 } p.p2 { margin: 0.0px 0. ...

  6. iOS10构建版本不显示的问题

    iOS10,构建版本问题: 在Xcode中->product->archive,进行相关操作后,upload后没有报错验证也成功的情况下,在开发者账号构建版本号里面迟迟没有显示的原因: i ...

  7. 初用Linux, 安装Ubuntu16.04+NVIDIA387+CUDA8.0+cudnn5.1+TensorFlow1.0.1

    因为最近Deep Learning十分热门, 装一下TensorFlow学习一下. 本文主要介绍安装流程, 将自己遇到的问题说明出来, 并记录自己如何处理, 原理方面并没有能力解释. 由于本人之前从来 ...

  8. windows32位安装MYSQL-python1.2.3

    建议不要用pip安装MYSQL-python,因为会自动选择MYSQL-python1.2.5这个版本,但是这个版本不支持windows 32位系统. 1.首先安装VS2008,因为要依赖VC9.0编 ...

  9. javascript . 02 break和continue、while、数组、冒泡排序

    1.1 知识点 NaN是number类型 null是object类型 /**  + 回车  多行注释 table 会为内部的tr td 自动补齐闭合标签 1.2 循环结构 1.2.1  Break和c ...

  10. CognitiveJ一个Java的人脸图像识别开源分析库

    CognitiveJ 是一个开源的,支持 Java 8 API 的库,用于管理和编排 Java 应用和微软的Cognitive(Project Oxford)机器学习和图像处理库的项目,可以让你查询以 ...