Mybatis使用注解操作数据库CURD的简单示例(这里只演示注解所需要的相关东西,其它项目配置及文件见文章:http://www.04007.cn/article/888.html 和 http://www.04007.cn/article/892.html )。本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
关于@param() 注解本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
1.引用类型参数不用加param注解, 基本类型在参数只有一个的话,可以加上,可以不加。如果有多个参数的话就需要加上。建议统一不管是几个基本类型参数都加上。加上param后,SQL中只能引用param()中设定的参数名。本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
2.在SQL语句中引用字段的时候可以使用#{}或${},但建议尽量使用#{}。#{}:表示一个占位符号,可以实现preparedStatement占位,自动进行java类型和jdbc类型转换,可有效防止sql注入。而${}:表示拼接sql字符串,${}传入的内容拼接在sql中但不进行jdbc类型转换,安全性不如#{}。因此尽量使用#{}本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
AreaMapper类文件代码如下:包括CURD各方法的定义,及SQL注解:本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
//AreaMapper类代码 package com.kermit.dao; import com.kermit.pojo.Area; import org.apache.ibatis.annotations.*; import java.util.List; public interface AreaMapper { @Select("select * from area") public List<Area> getList(); @Select("select * from area where id=#{id} limit 1") public Area getOne(@Param("id") int id); @Insert("insert into area(city, area, stat) values(#{city}, #{area}, #{stat})") public int insertArea(Area area); @Update("update area set city=#{city},area=#{area},stat=#{stat} where id=#{id}") public int updateArea(Area area); @Delete("delete from area where id= #{aid}") public int deleteArea(@Param("aid") int id); } //junit测试代码如下: import com.kermit.dao.AreaMapper; import com.kermit.pojo.Area; import com.kermit.utils.MybatisConn; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import java.io.IOException; import java.util.List; public class TestMybatis { @Test public void test1() throws IOException { SqlSession sqlSession = MybatisConn.getSqlsession(); AreaMapper mapper = sqlSession.getMapper(AreaMapper.class); //增加一条记录 int rsInsert = mapper.insertArea(new Area(0,"上海","闵行区", 1)); System.out.println("增加结果:"+rsInsert+"--"); //删除一条记录 int rsDelete = mapper.deleteArea(30); System.out.println("删除结果:"+rsDelete+"--"); int rsDelete2 = mapper.deleteArea(30); System.out.println("再删除返回结果:"+rsDelete2+"--"); //更改一条记录 int rsUpdate = mapper.updateArea(new Area(1, "北京", "海淀区", 1)); System.out.println("更新结果:"+rsUpdate+"--"); //查询多条记录 List<Area> arealist = (List<Area>) mapper.getList(); System.out.println("查询结果如下:"); for(Area area: arealist){ System.out.println(area); } //查询一条记录 Area area = mapper.getOne(1); System.out.println("查询单条结果如下:"); System.out.println(area); System.out.println(area.getCity()); sqlSession.close(); } }本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
示例中使用Mybatis如果我们只需要得到一条查询结果,如方法中的getOne,我们只需要指定其返回类型为Area,而不是List,即可实现。程序执行结果如下(logImpl为STDOUT_LOGGING):本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
......Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter. PooledDataSource forcefully closed/removed all connections. PooledDataSource forcefully closed/removed all connections. PooledDataSource forcefully closed/removed all connections. PooledDataSource forcefully closed/removed all connections. Opening JDBC Connection Created connection 1899223686. Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7133da86] ==> Preparing: insert into area(city, area, stat) values(?, ?, ?) ==> Parameters: 上海(String), 闵行区(String), 1(Integer) <== Updates: 1 增加结果:1-- ==> Preparing: delete from area where id= ? ==> Parameters: 30(Integer) <== Updates: 1 删除结果:1-- ==> Preparing: delete from area where id= ? ==> Parameters: 30(Integer) <== Updates: 0 再删除返回结果:0-- ==> Preparing: update area set city=?,area=?,stat=? where id=? ==> Parameters: 北京(String), 海淀区(String), 1(Integer), 1(Integer) <== Updates: 1 更新结果:1-- ==> Preparing: select * from area ==> Parameters: <== Columns: id, city, area, stat <== Row: 1, 北京, 海淀区, 1 <== Row: 35, 北京, 东城区, 1 <== Row: 18, 厦门, 思明区, 1 <== Row: 37, 上海, 闵行区, 1 <== Row: 39, 上海, 闵行区, 1 <== Total: 5 查询结果如下: Area(id=1, city=北京, area=海淀区, stat=1) Area(id=35, city=北京, area=东城区, stat=1) Area(id=18, city=厦门, area=思明区, stat=1) Area(id=37, city=上海, area=闵行区, stat=1) Area(id=39, city=上海, area=闵行区, stat=1) ==> Preparing: select * from area where id=? limit 1 ==> Parameters: 1(Integer) <== Columns: id, city, area, stat <== Row: 1, 北京, 海淀区, 1 <== Total: 1 查询单条结果如下: Area(id=1, city=北京, area=海淀区, stat=1) 北京 Rolling back JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7133da86] Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7133da86] Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@7133da86] Returned connection 1899223686 to pool. Process finished with exit code 0本文地址:http://www.04007.cn/article/894.html,未经许可,不得转载.
本文地址:http://www.04007.cn/article/894.html 未经许可,不得转载. 手机访问本页请扫描右下方二维码.
![]() |
![]() |
手机扫码直接打开本页面 |