时间:2021-05-20
1. 查询
除了单条记录的查询,这里我们来尝试查询一组记录。
IUserMapper接口添加下面方法:
List<User> getUsers(String name);在User.xml中添加:
<resultMap type="User" id="userList"><!-- type为返回列表元素的类全名或别名 --> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> <result column="address" property="address" /> </resultMap> <select id="getUsers" parameterType="string" resultMap="userList"><!-- resultMap为上面定义的User列表 --> select * from `user` where name like #{name} </select>测试方法:
@Test public void queryListTest() { SqlSession session = sqlSessionFactory.openSession(); try { IUserMapper mapper = session.getMapper(IUserMapper.class); List<User> users = mapper.getUsers("%a%"); // %在sql里代表任意个字符。 for (User user : users) { log.info("{}: {}", user.getName(), user.getAddress()); } } finally { session.close(); } }如果联表查询,返回的是复合对象,需要用association关键字来处理。
如User发表Article,每个用户可以发表多个Article,他们之间是一对多的关系。
(1) 创建Article表,并插入测试数据:
-- Drop the table if exists DROP TABLE IF EXISTS `Article`; -- Create a table named 'Article' CREATE TABLE `Article` ( `id` int NOT NULL AUTO_INCREMENT, `user_id` int NOT NULL, `title` varchar(100) NOT NULL, `content` text NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; -- Add several test records INSERT INTO `article` VALUES ('1', '1', 'title1', 'content1'), ('2', '1', 'title2', 'content2'), ('3', '1', 'title3', 'content3'), ('4', '1', 'title4', 'content4');(2) com.john.hbatis.model.Article类:
public class Article { private int id; private User user; private String title; private String content; // Getters and setters are omitted }(3) 在IUserMapper中添加:
List<Article> getArticlesByUserId(int id);(4) 在User.xml中添加:
<resultMap type="com.john.hbatis.model.Article" id="articleList"> <id column="a_id" property="id" /> <result column="title" property="title" /> <result column="content" property="content" /> <association property="user" javaType="User"><!-- user属性映射到User类 --> <id column="id" property="id" /> <result column="name" property="name" /> <result column="address" property="address" /> </association> </resultMap> <select id="getArticlesByUserId" parameterType="int" resultMap="articleList"> select u.id, u.name, u.age, u.address, a.id a_id, a.title, a.content from article a inner join user u on a.user_id=u.id and u.id=#{id} </select>(5)测试方法:
@Test public void getArticlesByUserIdTest() { SqlSession session = sqlSessionFactory.openSession(); try { IUserMapper mapper = session.getMapper(IUserMapper.class); List<Article> articles = mapper.getArticlesByUserId(1); for (Article article : articles) { log.info("{} - {}, author: {}", article.getTitle(), article.getContent(), article.getUser().getName()); } } finally { session.close(); } }附:
除了在association标签内定义字段和属性的映射外,还可以重用User的resultMap:
2. 新增
IUserMapper接口添加下面方法:
int addUser(User user);
User.xml添加:
<insert id="addUser" parameterType="User" useGeneratedKeys="true" keyProperty="id"><!-- useGeneratedKeys指定myBatis使用数据库自动生成的主键,并填充到keyProperty指定的属性上。如果未指定,返回对象拿不到生成的值 --> insert into user(name,age,address) values(#{name},#{age},#{address}) </insert>测试方法:
@Test public void addUserTest() { User user = new User("Lucy", 102, "Happy District"); SqlSession session = sqlSessionFactory.openSession(); try { IUserMapper mapper = session.getMapper(IUserMapper.class); int affectedCount = mapper.addUser(user); session.commit(); // 默认为不自动提交。调用session.getConnection().getAutoCommit()查看 log.info("{} new record was inserted successfully whose id: {}", affectedCount, user.getId()); } finally { session.close(); } }3. 更新
接口添加方法:
int updateUser(User user);User.xml添加:
<update id="updateUser" parameterType="User"> update `user` set name=#{name}, age=#{age}, address=#{address} where id=#{id} </update>测试方法:
@Test public void updateUserTest() { SqlSession session = sqlSessionFactory.openSession(); try { IUserMapper mapper = session.getMapper(IUserMapper.class); User user = mapper.getUserById(8); user.setAddress("Satisfied District"); int affectedCount = mapper.updateUser(user); // 除了要修改的属性外,user的其它属性也要赋值,否则这些属性会被数据库更新为初始值(null或0等),可以先查询一次,但这样会增加和数据库不必要的交互。后面的条件判断能避免此问题。 log.info("Affected count: {}", affectedCount); session.commit(); } finally { session.close(); } }4. 删除
接口添加方法:
int deleteUser(int id);User.xml添加:
<delete id="deleteUser" parameterType="int"> delete from `user` where id=#{id} </delete>测试方法:
@Test public void deleteUserTest() { SqlSession session = sqlSessionFactory.openSession(); try { IUserMapper mapper = session.getMapper(IUserMapper.class); int affectedCount = mapper.deleteUser(8); log.info("Affected count: {}", affectedCount); session.commit(); } finally { session.close(); } }声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Java泛型与数据库应用。分享给大家供大家参考,具体如下:一点睛BaseDao定义了基本的数据库增删查改,之后可以继承该泛型类,实现各自的增删查改
java操作mysql数据库的代码我们已经了如指掌了,增删改查,java对mongodb数据库也是类似的操作,先是数据库连接,再是进行操作。首先我们进入进入ad
最近在鼓捣spring-boot,真好用,学习到jpa.通过生成Entity文件,能够快速的生成数据库,并且使用JpaRepository的基本增删查改方法,好
python连接数据库执行增删查改mysql数据库importpymysqlpostgresql数据库importpsycopg2普通含%的python语句sq
一、使用Springboot+Jpa实现对mysql数据库的增删改查和分页功能JPA是JavaPersistenceAPI的简称,中文名Java持久层API,是