8.MyBatos的动态Sql
1.创建javaWeb项目MyBatis_dynamicSQL并在WebRoot下的WEB-INF下的lib下添加如下jar文件
cglib-nodep-2.1_3.jar
log4j-1.2.17.jar
mybatis-3.2.3.jar
ojdbc14.jar
创建如下userinfo.sql
SQL> create table userinfo
(id number(4),
name varchar2(50),
password varchar2(20
telephone varchar2(15),
isadmin varchar2(5));
SQL> --4.2 用户表序列
SQL> create sequence seq_userinfo;
SQL> alter table userinfo add constraint pk_userinfo_id primary key(id);
SQL> insert into userinfo values(seq_userinfo.nextval,'holly','123','134518024
','是');
SQL> commit;
2.在src下创建log4j.properties日志文件
log4j.properties
3..在src下创建Configuration.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">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
<property name="username" value="system"/>
<property name="password" value="accp"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/mapper/UserInfoMapper.xml"/>
</mappers>
</configuration>
Configuration.xml
4.在src下com.entity包下创建UserInfo.java
package com.entity; import java.util.ArrayList;
import java.util.List; /**
* 用户信息表
* @author Dell
*
*/
public class UserInfo {
private Integer id; //编号
private String name; //姓名
private String password; //密码
private String telephone; //电话
private String isadmin; //是否是管理员
private List<Integer> ids=new ArrayList<Integer>(); public UserInfo() {
} public UserInfo(Integer id, String name, String password, String telephone,
String isadmin) {
this.id = id;
this.name = name;
this.password = password;
this.telephone = telephone;
this.isadmin = isadmin;
} public UserInfo(String name, String password) {
this.name = name;
this.password = password;
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getTelephone() {
return telephone;
} public void setTelephone(String telephone) {
this.telephone = telephone;
} public String getIsadmin() {
return isadmin;
} public void setIsadmin(String isadmin) {
this.isadmin = isadmin;
} public List<Integer> getIds() {
return ids;
} public void setIds(List<Integer> ids) {
this.ids = ids;
} @Override
public String toString() {
return "UserInfo [id=" + id + ", ids=" + ids + ", isadmin=" + isadmin
+ ", name=" + name + ", password=" + password + ", telephone="
+ telephone + "]";
} }
UserInfo.java
5.在src下com.util包下创建MyBatisUtil.java
MyBatisUtil.java
6.在src下com.mapper包下创建UserInfoMapper.java接口
package com.mapper; import java.util.List; import com.entity.UserInfo;
/**
* 数据访问层接口
* @author pc
*
*/
public interface UserInfoMapper {
/**
* 1.根据用户信息查询某个用户
* @param userinfo
* @return
*/
UserInfo findNamePwd(UserInfo userinfo); /**
* 2.添加用户信息
* @param userinfo
*/
void addUserInfo(UserInfo userinfo); /**
* 3.查询所有
* @return
*/
List<UserInfo> findAll(UserInfo userinfo); /**
* 4.删除
* @param id
*/
void deleteUser(int id);
/**
* 5.修改
* @param userinfo
*/
void updateUser(UserInfo userinfo); /**
* 6.根据id查询
*/
UserInfo findId(int id);
}
UserInfoMapper.java
7.在src下com.mapper包下创建UserInfoMapper.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="com.mapper.UserInfoMapper">
<!-- 定义sql片段,该片段中不包含where,也就是定义公共sql部分 -->
<sql id="id_where">
<if test="id!=null and id!=''">
and id=#{id}
</if>
</sql> <!-- 根据用户查询用户 -->
<select id="findNamePwd" parameterType="com.entity.UserInfo" resultType="com.entity.UserInfo">
select * from userinfo
<!-- 动态sql -->
<where> <!--name,password,这个参数是输入参数对象的 属性-->
<if test="name!=null and name!=''">
and name=#{name}
</if>
<if test="password!=null and password!=''">
and password=#{password}
</if>
</where> </select> <!-- 插入用户信息 -->
<insert id="addUserInfo" parameterType="com.entity.UserInfo">
insert into userinfo values(seq_userinfo.nextval,#{name},#{password},#{telephone},#{isadmin})
</insert> <!-- 查询所有 -->
<select id="findAll" resultType="com.entity.UserInfo" parameterType="com.entity.UserInfo">
select * from userinfo
<where>
<if test="ids!=null">
<foreach collection="ids" item="id" open="and id in(" close=")" separator=",">
#{id}
</foreach>
</if>
</where>
</select> <!-- 删除 -->
<delete id="deleteUser" parameterType="int">
delete from userinfo
<!-- 动态sql中引用sql片段 --> <where>
<!-- 引用sql片段的id,如果refid指定的不在本映射文件中,需要前面加namespace -->
<include refid="id_where"/>
<!-- 这里可以引用其他的sql片段 -->
</where>
where id=#{id}
</delete> <!-- 修改 -->
<update id="updateUser" parameterType="com.entity.UserInfo">
update userinfo set name=#{name},password=#{password},telephone=#{telephone},isadmin=#{isadmin} where id=#{id}
</update> <!-- 根据id查询 -->
<select id="findId" parameterType="int" resultType="com.entity.UserInfo">
select * from userinfo where id=#{id} </select> </mapper>
UserInfoMapper.xml
8.在src下com.test包下创建Test.java
package com.test; import java.util.ArrayList;
import java.util.List; import org.apache.ibatis.session.SqlSession; import com.entity.UserInfo;
import com.mapper.UserInfoMapper;
import com.util.MybatisUtil; public class Test { /**
* @param args
*/
public static void main(String[] args) {
SqlSession sqlSession=MybatisUtil.getSqlSession(false);
UserInfoMapper mapper=sqlSession.getMapper(UserInfoMapper.class);
UserInfo userinfo=new UserInfo("李杰", "123");
// UserInfo info=mapper.findNamePwd(userinfo);
// if(info!=null){
// System.out.println("登陆成功");
// }else{
// System.out.println("登陆失败");
//
// } List<Integer> ids=new ArrayList<Integer>();
ids.add(22);
ids.add(23);
ids.add(24);
userinfo.setIds(ids); List<UserInfo> userin=mapper.findAll(userinfo);
System.out.println(userin); } }
Test.java
8.MyBatos的动态Sql的更多相关文章
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- Mysql - 游标/动态sql/事务
游标这个在我目前的项目里面用的还不多, 但是其功能还是很强大的. 动态sql以前都没用过, 是跟着富士康(不是张全蛋的富土康哦)过来的同事学的. 还是挺好用的. 我的数据库方面, 跟他学了不少. 在此 ...
- MyBatis4:动态SQL
什么是动态SQL MyBatis的一个强大特性之一通常是它的动态SQL能力.如果你有使用JDBC或其他相似框架的经验,你就明白条件串联SQL字符串在一起是多么地痛苦,确保不能忘了空格或者在列表的最后的 ...
- 分享公司DAO层动态SQL的一些封装
主题 公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或 ...
- MySQL存储过程动态SQL语句的生成
用Mysql存储过程来完成动态SQL语句,使用存储过程有很好的执行效率: 现在有要求如下:根据输入的年份.国家.节假日类型查询一个节假日,我们可以使用一般的SQL语句嵌入到Java代码中,但是执行效率 ...
- 【Java EE 学习 79 下】【动态SQL】【mybatis和spring的整合】
一.动态SQL 什么是动态SQL,就是在不同的条件下,sql语句不相同的意思,曾经在“酒店会员管理系统”中写过大量的多条件查询,那是在SSH的环境中,所以只能在代码中进行判断,以下是其中一个多条件查询 ...
- 自定义函数执行动态sql语句
--函数中不能调用动态SQL,使用用存储过程吧.如果还要对函数做其他操作,换成存储过程不方便,可以考虑把其他操作一起封装在存储过程里面.如: create proc [dbo].[FUN_YSCL ...
- mybatis入门基础(五)----动态SQL
一:动态SQL 1.1.定义 mybatis核心对sql语句进行灵活操作,通过表达式进行判断,对sql进行灵活拼接.组装. 1.2.案例需求 用户信息综合查询列表这个statement的定义使用动态s ...
- mybatis 动态sql表达式相关应用
一.mybatis 表达式简介 对于mybatis3 ,提供了一种动态sql的方式.通过动态sql我们可以直接在mybatis 的xm映射文件中直接通过条件判断的方式进行查询添加的拼接.mybatis ...
随机推荐
- 基于SUSE Linux做NFS文件挂载
linux文件挂载其实和windows文件共享原理差不多,由主机配置一个共享目录,客户端机器可以通过网络访问该共享目录. 下面以SUSE11为例子,简要描述下NFS文件挂载过程: 一.主机端(主机IP ...
- WinDBG中加载SOS和CLR
WinDBG中加载SOS和CLR 最近产品环境出现了部分服务器当机情况,虽然重启之后问题就不出现了.但本着彻底解决问题的态度,想要找到root cause.多次尝试Visual Studio失败(可能 ...
- Iveely Search Engine 0.4.0 的发布
千呼万唤始出来,Iveely Search Engine 0.4.0 的发布 经过无数个夜晚的奋战,以及无数个夜晚的失眠,Iveely Search Engine 0.4.0 终于熬出来了,这其中 ...
- DataSet、DataTable、DataRow 复制
DataSet.DataTable.DataRow 复制 DataSet 对象是支持 ADO.NET的断开式.分布式数据方案的核心对象 ,用途非常广泛.我们很多时候需要使用其中的数据,比如取得一个Da ...
- java对数据库的操作
package com.DateSystem; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLEx ...
- The Event System
The Event System 在Qt中,事件是继承了虚拟类QEvent的对象,它代表了程序所发生的事情或者程序需要知道的一个外部活动的结果.事件可以被任意 QObject子类的实例接收和处理,是与 ...
- OpenRisc-34-ORPSoC跑eCos实验
引言 ORPSoC目前支持好几种OS,除了前面一直介绍的linux,还支持eCos,eCos是RTOS,如果你的系统对时间的要求比较高,那eCos会是一个不错的选择. 本小节就简单介绍一下,在ORPS ...
- Android的状态栏通知(Notification)
通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: 如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息. 1.Layout布局文件: <RelativeLayout xmlns:an ...
- 用indexOf获取字符窜某个字符的所有位置
indexOf方法可以传两个参数,第二个参数是传位置的参数,利用这点获取所有的位置.例如: var str = "hello world,welcome!"; var arr = ...
- 结构-行为-样式-Javascript 深度克隆函数(转)
突然想到有一回面试的时候有一个问题一直挂在心头,于是乎在网上找了找,这个比较好: //深度克隆 function deepClone(obj) { var result, oClass = isCla ...