-
删除多条数据的方法 在Sql配置文档中添加 <delete id="deleteMore" parameterType="java.util.List" > delete from message where id in( <foreach collection="list" item="item" separator=","> #{item} </foreach> ) </delete> 其中<foreach>标签中有separator属性用来指明分割的符号.如果不指明的话就要手动添加逗号,拼接sql的时候就会出错. 即#{item},#{item},#{item}, 最后会多出一个逗号,如果设置了separator="," 那么Mybatis就会自动为我们分割,不需要额外添加逗号,直接#{item},最终会变成#{item},#{item},#{item} public void deleteMore(List<Integer> list){ SqlSession sqlSession=Util.getSqlSession(); sqlSession.delete("deleteMore",list); sqlSession.commit(); sqlSession.close(); }查看全部
-
执行删除功能 在Sql的配置文档需要添加 <delete id="deletemessage" parameterType="int" > delect from message where id =#{_parameter} //#{}括号里符合OGNL写法,因为是基本数据类型所以是_parameter </delete> 只有<select>标签需要添加resultMap属性来指定关联映射. 根据id编号来删除单条数据 public void deletemessage(int id){ SqlSession sqlSession=Util.getSqlSession(); sqlSession.delete("deletemessage",id); sqlSession.commit(); //提交事务 sqlSession.close(); } 在Mybatis的增删改中都需要提交事务.MyBatis有事务控制的能力,默认会创建事务但不会自动提交,因此需要用SqlSession的commit()方法提交.且用完SqlSession需要关闭.在JDBC是会自动创建与提交事务. servlet负责接收页面的值和向页面传值.如果有业务逻辑需要处理则调用相应的service层的方法.service层中的方法参数来接收servlet传过来的值,并对其进行处理,如果有需要则调用相应的dao层.dao层完成与数据库的交互,执行相应的SQL语句.查看全部
-
Mybatis使用方法查看全部
-
log4j.rootLogger配置的第二个值是输出日志的信息要显示的位置.通常输出在控制台或者文件中.并不是因为单词为Console就会输出到控制台,输出到哪是由 org.apache.log4j.ConsoleAppender这个类控制的,只要配置了这个类就能够输出到控制台.如果要输出到文件就要配其他的类. 且rootLogger配置的第二个值是自定义的,只是个名称.即可以是Console也可以是一个字母a.只要这个值与appender后面的单词一样即可. log4j.appender.Console.layout配置的是输出日志的布局形式.org.apache.log4j.PatternLayout是一种自定义的布局形式.需要与log4j.appender.Console.layout.ConversionPattern一起使用,ConversionPattern是配置自定义输出内容的布局的形式. %开头是有特殊意义的 %d表示产生日志的时间 %t表示产生这个日志所处于的那个线程的名称 %p表示输出日志的级别即会显示debug、info的字样 %c表示输出日志时这条输出语句所处于的类的全名 %m表示输出日志的时候附加的信息.即log.debug(mes)中的mes信息. %n表示换行. log4j.logger配置的是自定义包下的输出级别.在log4j.logger后面可以跟任何一个包名.来规定此包下的类的日志输出级别. log4j.rootLogger配置的那个输出级别是对应整个工程的,如果想要在某个包下用别的输出级别则可以通过log4j.logger.自定义包名="输出级别"设置.查看全部
-
properties文件(.properties)里面都是key=value的形式.当需要用到properties文件的时候,程序里会通过key值来取到对应的value值. Mybatis已经封装好对log4j操作的接口,因此会自动操作log4j输出日志信息. log4j.properties文件就是为log4j准备的. (log4j.properties文件的内容): log4j.rootLogger=debug,Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%5p [%t] - %m%n log4j.logger.org.apache=INFO 其中log4j.rootLogger配置的是当使用log4j输出日志的时候输出的级别以及输出的位置,因此有两个值,用逗号隔开. Logger log; log.debug(mes); //输出日志信息的不同形式 log.info(mes); log.warn(mes); log.error(mes); 即输出的级别有debug、info、warn、error等.级别由低到高. 当log4j.rootLogger配置输出日志信息的级别是debug时,则可以输出通过大于等于debug形式输出的信息.当配置为info时,则可以输出通过大于等于info形式输出的信息,此时便不会输出通过debug形式输出的信息.rootLogger的输出级别一定要配置为debug,因为Mybatis封装好的log4j方法中都是以debug的形式输出.查看全部
-
因为动态Sql语句是在SQL配置文档里面,运行时我们并不知道是传递了哪些参数以及内部发生了什么变化. 可以用log4j调试动态SQL,Log4j是Apache的一个开源项目,通过使用Log4j可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等.我们也可以控制每一条日志的输出格式,通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.日志是日记中的一种,多指非个人的,一般是记载每天所做的工作. Mybatis支持log4j,我们只需把log4j的jar包导入到项目以及完成log4j的配置文件即可.Mybatis就可以通过log4j把Mybatis执行的sql语句打印出来. log4j的配置文档在Mybatis的源码包有,路径-->E:\Mybatis\mybatis-3-mybatis-3.2.8\src\test\java\log4j.properties 把配置文件加载在src下.查看全部
-
OGNL表达式语言可以直接调用JAVA对象的方法. <if text="command!=null and ! "".equals(command.trim())"> 除了属性值那个""双引号之外,因为在XML中非属性值的双引号需要用转译字符,与HTML相同,即"" 在xml中不能直接使用&&(与)这个操作符,必须要转译字符,即&&或者直接用OGNL自己的and操作符,在XML中是支持的. 使用#{变量名}来为sql传递参数.变量名与OGNL的写法一样,但不是OGNL表达式.(自定义类型->属性名,数组->array[index]) 即: <select parameterType="com.imooc.Message" id="find"> select * from Message where 1=1 <if text="command!=null and ! "".equals(command.trim())"> and command=#{command} </if> </select> MyBatis中可以使用OGNL的地方有两处: •动态SQL表达式中 •${param}参数中 上面代码中test的值会使用OGNL计算结果。查看全部
-
在OGNL中经常需要用到操作符来进行判断. 即在<if text="">标签的text属性值中就经常要用到操作符来进行判断. 在GONL中支持JAVA的常用操作符,以及会有自己特有的操作符.查看全部
-
从集合(包括数组、list、Map)类型中取出一条数据. 即假如parameterType="集合类型",那么怎样通过<if text="">标签取出集合中的一条数据来进行判断. 如果parameterType="String或基本数据类型的数组",则在<if text="array[索引](String[])"> //根据索引获取数组中的一个元素. 如果parameterType="自定义类型的数组",则在<if text="array[索引].属性名(Message[])"> //根据索引获取数组中的一个对象的一个属性. 如果parameterType="List<String>"类型,则在<if text="list[索引](List<String>)"> 如果parameterType="List<Message>"集合泛型是自定义类型,则在<if text="list[索引].属性名(List<Message>)"> 如果parameterType="Map<String,String>"类型,则在<if text="_parameter.key(Map<String,String>)"> //其中_parameter在Map中是可以省略不写的. 如果parameterType="Map<String,Message>"类型,则在<if text="key.属性名(Map<String,Message>)"> 像list与Array中需要提供一个索引来获取值,一般我们不知道明确的索引位置.但通常会明确知道Map集中的key值.这种写法用在Map较多. 在项目中经常用<foreach>标签取出list与Array集合中的每一条数据.此标签不需要用OGNL表达式.foreach标签可以用在数组、List与Map中. <foreach collection="array" index="i" item="item"> 其中collection属性是指向一个完整的集合.可以是array(数组)、list(List集)、_parameter(Map集) index属性在数组与List集合中是索引(下标),在Map中是key值. item属性就是遍历当中的具体某个属性.在Map中指的是value.如果item是自定义类型,那么就是item.属性名查看全部
-
把方法的参数传递给Sql配置文件,SqlSession对象提供两个参数的select()、update()等方法,第一个参数是对应的sql语句的id属性值,第二个为传给Mybatis的参数.但一次只能传一个参数,所以当有多个参数的时候,可以把参数封装在一个javabean的对象中,因为javabean会对应表的字段.要传递的参数值会跟javabean的属性匹配. public List<Message> getMessage(String command,String description){ List<Message> list=new ArrayList<Message>(); SqlSession sqlSession=Util.getSqlSession(); Message m=new Message(); m.setCommand(command); m.setDescription(description); list=sqlSession.selectList("find",m); return list; } Sql配置文件接收参数的方法是在对应sql语句的标签上加上parameterType属性. 属性值就是传递过来参数的数据类型. <select id="find" parameterType="com.imooc.Message" resultMap="result1"> select * from Message where 1=1 <if test="command!=null"> and command=#{command} </if> </select> 其中在<if test="">标签下,属性值是用OGNL表达式来写的. 如果传过来的参数的类型是String以及基本数据类型,那么标签中的OGNL表达式写法就必须是_parameter.如果传过来的参数是自定义类型.即本笔记例子,则直接用属性名(command)即可. 不同的parameterType=""参数类型在OGNL表达式中会有不同的写法.查看全部
-
动态 SQL MyBatis 的强大特性之一便是它的动态 SQL。如果你有使用 JDBC 或其他类似框架的经验,你就能体会到根据不同条件拼接 SQL 语句有多么痛苦。拼接的时候要确保不能忘了必要的空格,还要注意省掉列名列表最后的逗号。利用动态 SQL 这一特性可以彻底摆脱这种痛苦。 通常使用动态 SQL 不可能是独立的一部分,MyBatis 当然使用一种强大的动态 SQL 语言来改进这种情形,这种语言可以被用在任意的 SQL 映射语句中。 动态 SQL 元素和使用 JSTL 或其他类似基于 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多的元素需要来了解。MyBatis 3 大大提升了它们,现在用不到原先一半的元素就可以了。MyBatis 采用功能强大的基于 OGNL 的表达式来消除其他元素。 动态 SQL 通常要做的事情是有条件地包含 where 子句的一部分,与<if test="">标签配合使用。比如: <select id="find" parameterType="Blog" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> </select> 这条语句提供了一个可选的文本查找类型的功能。如果没有传入“title”,那么所有处于“ACTIVE”状态的BLOG都会返回;反之若传入了“title”,那么就会把模糊查找“title”内容的BLOG结果返回(就这个例子而言,细心的读者会发现其中的参数值是可以包含一些掩码或通配符的)。查看全部
-
一个完整的Sql配置文件: <mapper namespace="User"> <resultMap type="UserAlias" id="UserResult"> <id column="id" jdbcType="INTEGER" property="id"/> <result column="username" jdbcType="VARCHAR" property="username"/> <result column="password" jdbcType="VARCHAR" property="password.encrypted"/> <result column="administrator" jdbcType="BOOLEAN" property="administrator"/> </resultMap> <select id="find" parameterType="long" resultMap="UserResult"> SELECT * FROM user WHERE id = #{id:INTEGER} </select> <delete id="delete" parameterType="UserAlias"> DELETE FROM user WHERE id = #{id:INTEGER} </delete> <insert id="insert" parameterType="UserAlias" useGeneratedKeys="false"> .....//省略 </insert> <update id="update" parameterType="UserAlias"> UPDATE user SET username = #{username,jdbcType=VARCHAR}, password = #{password.encrypted,jdbcType=VARCHAR}, administrator = #{administrator,jdbcType=BOOLEAN} WHERE id = #{id,jdbcType=INTEGER} </update> </mapper>查看全部
-
当配置好Sql配置文件,最后要在主配置文件configuration.xml中的<mappers>标签下的<mapper>子标签的resource属性来指明要关联的Sql配置文件.一个<mappers>标签下可以有多个<mapper>标签,即一个configuration配置文件可以关联多个Sql配置文件. <mappers> <mapper resource="com/imooc/config/User.xml"/> </mappers>查看全部
-
Sql配置文档中会有<resultMap>标签,用来配置数据库表字段与javabean属性的关联. <resultMap type="UserAlias" id="UserResult"> <id column="id" jdbcType="INTEGER" property="id"></id> <result column="username" jdbcType="VARCHAR" property="username"></result> <result column="password" jdbcType="VARCHAR" property="password.encrypted"></result> <result column="administrator" jdbcType="BOOLEAN" property="administrator"></result> </resultMap> 其中<resultMap>标签有type、id属性.type属性指定对应的javabean,id属性就是标识符. 在<resultMap>标签下有<id>与<result>子标签,<id>标签对应数据库表的主键.普通的字段则用<result>标签,它们都有column、jdbcType、property属性.column属性对应数据库表的字段名,jdbcType属性对应该字段名的数据库中的数据类型.(即java.sql.Types下的属性名int对应Integer),property属性对应javabean的属性名. <select>标签有resultMap属性,属性值与<resultMap>中的id属性的属性值一样.resultMap属性用来指定此sql语句将在此resultMap中寻找映射关系. <select id="find" resultMap="UserResult"> select * from user where 1=1; </select>查看全部
-
创建Sql配置文件 可以在mybatis-3-mybatis-3.2.8\src\test\java\org\apache\ibatis\submitted\complex_property下的User.xml.把Sql配置文件直接放在src下即可. Sql配置文件的作用是配置Sql语句提供给SqlSession,让它能读到并且执行.可以让一个javabean对应一个Sql配置文件.Sql配置文件里面有很多<select>、<update>、<insert>、<delete>标签,都有一个id属性.标签之间会有对应的sql语句. 在多个Sql配置文件之间标签的id属性属性值都不可以重复.但是在不同Sql配置文件中都有<mapper namespace="">标签,如果多个Sql配置文件的namespace属性值都不同,那么这多个Sql配置文件之间可以出现标签的id属性值重复. 在同一个Sql文件中的同一个域中不能出现两个相同的id. Sql配置文件<mapper>标签一定要存在namespace属性,否则会加载错误. SqlSession对象的select()、selectList()、delete()、insert()、udpate()方法可以执行Sql配置文件中标签下的sql语句,参数都是在Sql配置文件中标签的id属性的属性值.如果不同sql配置文件的<mapper namespace="">标签的namespace属性值都不一样,则可能会出现相同的id属性值的标签.因此在调用方法的参数中应该加上namespace前缀,即select("namespace.id"); 其中selectList()是查询返回一个集合.select()是查询一条记录返回一个对象.查看全部
举报
0/150
提交
取消