花卉网站建设策划书正规男科医院
news/
2025/10/1 23:47:29/
文章来源:
花卉网站建设策划书,正规男科医院,上海包装设计公司有哪些,设计欣赏网站文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查
使用注… 文章目录 1. MyBatis的常用注解2. 基于注解的MyBatis增删改查增删改查完整代码加载映射关系测试代码 3. MyBatis的注解实现复杂映射开发一对一操作的实现一对一操作实现的第二种方式一对多操作的实现多对多操作实现 1. MyBatis的常用注解 2. 基于注解的MyBatis增删改查
使用注解开发就可以删掉原本写MyBatis语句的xml文件了注解只要在UserMapper.java接口上进行实现即可
增
Insert(insert into user values(#{id}, #{username}, #{password}, #{birthday}))
void save(User user);删
Delete(delete from user where id#{id})
void delete(int id);改
Update(update user set username#{username}, password#{password}, birthday#{birthday} where id#{id})
void update(User user);查
Select(select * from user where id#{id})
User findById(int id);Select(select * from user)
ListUser findAll();完整代码
package com.example.demo.mapper;import com.example.demo.domain.User;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;import java.util.List;public interface UserMapper {Insert(insert into user values(#{id}, #{username}, #{password}, #{birthday}))void save(User user);Delete(delete from user where id#{id})void delete(int id);Update(update user set username#{username}, password#{password}, birthday#{birthday} where id#{id})void update(User user);Select(select * from user where id#{id})User findById(int id);Select(select * from user)ListUser findAll();
}加载映射关系
原本在sqlMapConfig.xml文件中的加载映射文件修改为加载映射关系
!-- 加载映射关系 --
mapperspackage namecom.example.demo.mapper/
/mappers测试代码
原本数据库中的内容
package com.example.demo;import com.example.demo.domain.User;
import com.example.demo.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;public class DemoApplication {public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件InputStream inputStream Resources.getResourceAsStream(sqlMapConfig.xml);
// 3. 创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(inputStream);
// 4. 获取SqlSessionSqlSession sqlSession sqlSessionFactory.openSession();UserMapper mapper sqlSession.getMapper(UserMapper.class);
// 增加User信息User saveUser new User();saveUser.setUsername(newUser);saveUser.setPassword(aaaaaa);saveUser.setBirthday(new Date());mapper.save(saveUser);
// 删除User信息int deleteUserId 3;mapper.delete(deleteUserId);
// 修改User信息User updateUser new User();updateUser.setId(2);updateUser.setUsername(ccc);updateUser.setPassword(1234567update);mapper.update(updateUser);
// 根据Id查询UserUser user mapper.findById(1);System.out.println(user);
// 查询所有userListUser userList mapper.findAll();System.out.println(userList);sqlSession.commit();// 6. 释放资源sqlSession.close();}
}打印的信息
更新后的内容
3. MyBatis的注解实现复杂映射开发 此处对应于【Spring集成MyBatis】MyBatis的多表查询的内容来写一下对应的注解实现。
一对一操作的实现
原本基于配置是这么写的
?xml version1.0 encodingUTF-8 ?
!DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd
mapper namespacecom.example.demo.dao.OrderMapperresultMap idorderMap typecom.example.demo.domain.Order
!-- 手动指定字段与实体属性的映射关系--
!-- column:数据表的字段名称--
!-- property:实体的属性名称--id columnoid propertyid/idresult columnordertime propertyorderTime/resultresult columntotal propertytotal/resultresult columnuid propertyuser.id/resultresult columnusername propertyuser.username/resultresult columnpassword propertyuser.password/resultresult columnbirthday propertyuser.birthday/result/resultMapselect idfindAll resultMaporderMapSELECT *, o.id orderid, u.id userid FROM order o, user u WHERE o.uidu.id/select/mapper使用注解后如下修改
package com.example.demo.mapper;import com.example.demo.domain.Order;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface OrderMapper {Select(select *, o.id oid from order o, user u where o.uidu.id)Results({Result(column oid, property id),Result(column ordertime, property orderTime),Result(column total, property total),Result(column uid, property user.id),Result(column username, property user.username),Result(column password, property user.password)})ListOrder findAll();}一对一操作实现的第二种方式
其中在要封装的User对象中我们可以在Result注解中写明属性名称、数据库查询到的值、要封装的实体类型等等等有点类似于之前的注解中的那些属性不同的事这里通过一个One来指定通过哪个接口的方法来获得对应的数据这时候会将column的值注入到这个方法中来获得具体的结果 也就是首先使用
select * from order来查询出order下的所有信息包括id、ordertime、total、uid接着我们需要根据里面的uid可以查出对应的User信息并封装到Order实体类下的user属性中
select * from user where id(上面查询结果的所有uid)这里就需要在Result注解中进一步指定property、column、javaType、one(由于是一对一所以使用one一对多使用many)
package com.example.demo.mapper;import com.example.demo.domain.Order;
import com.example.demo.domain.User;
import org.apache.ibatis.annotations.One;
import org.apache.ibatis.annotations.Result;
import org.apache.ibatis.annotations.Results;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface OrderMapper {Select(select * from order)Results({Result(column id, property id),Result(column ordertime, property orderTime),Result(column total, property total),Result(property user, // 要封装的属性名称column uid, // 根据哪个字段去查询user表的数值javaType User.class, // 要封装的实体类型// select属性 代表查询哪个接口的方法获得数据one One(select com.example.demo.mapper.UserMapper.findById))})ListOrder findAll();}以上两种一对一操作的测试代码
package com.example.demo;import com.example.demo.domain.Order;
import com.example.demo.domain.User;
import com.example.demo.mapper.OrderMapper;
import com.example.demo.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;public class DemoApplication {public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件InputStream inputStream Resources.getResourceAsStream(sqlMapConfig.xml);
// 3. 创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(inputStream);
// 4. 获取SqlSessionSqlSession sqlSession sqlSessionFactory.openSession();OrderMapper orderMapper sqlSession.getMapper(OrderMapper.class);ListOrder orderList orderMapper.findAll();for (Order order : orderList) {System.out.println(order);}// 6. 释放资源sqlSession.close();}
}
结果
一对多操作的实现
查询User对应的订单和【Spring集成MyBatis】MyBatis的多表查询中一样首先需要再User里面加上一个orderList属性用于封装所有的订单并写好对应的set、get方法以及对应的toString方法。 类似于一对一操作的第二种实现方式我们需要在Result里面指定property、column、javaType由于返回的是List就不用one而用many 首先查询出所有的用户并在用户下面封装其订单列表。 通过
select * from user查出了用户的id,username,password,birthday的信息我们需要根据里面的id到order表里查询对应的订单
select * from order where uid(上面user查询出来的所有id)即再通过一个Result注解指定根据uid查询订单的方法。目前Order类里还没有根据uid查询订单的方法所以我们需要再去实现一下根据uid查询订单的方法 在OrderMapper里写
Select(select * from order where uid#{id})
ListOrder findByUid(int id);在UserMapper里写根据userid查询指定订单
Select(select * from user)
Results({Result(column id, property id),Result(column username, property username),Result(column password, property password),Result(column birthday, property birthday),Result(property orderList,column id,javaType List.class,many Many(select com.example.demo.OrderMapper.findByUid))
})
ListUser findUserAndOrderAll();测试
package com.example.demo;import com.example.demo.domain.User;
import com.example.demo.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class DemoApplication {public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件InputStream inputStream Resources.getResourceAsStream(sqlMapConfig.xml);
// 3. 创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(inputStream);
// 4. 获取SqlSessionSqlSession sqlSession sqlSessionFactory.openSession();UserMapper mapper sqlSession.getMapper(UserMapper.class);ListUser userList mapper.findUserAndOrderAll();for (User user : userList) {System.out.println(user);}// 6. 释放资源sqlSession.close();}
}查询出来的结果如下
多对多操作实现
查询User对应的角色和【Spring集成MyBatis】MyBatis的多表查询中一样首先需要再User里面加上一个roleList属性用于封装所有的角色并写好对应的set、get方法以及对应的toString方法。 实现过程如下 先查询所有的User信息
select * from USER根据userid查询所有的对应的role及其信息
select * from user_role ur, role r where ur.roleIdr.id and userid(上面查出来的所有id)那么首先我们需要建立roleMapper并在RoleMapper中写上对应的查询语句
package com.example.demo.mapper;import com.example.demo.domain.Role;
import org.apache.ibatis.annotations.Select;import java.util.List;public interface RoleMapper {Select(select * from user_role ur, role r where ur.roleIdr.id and userid#{id})ListRole findByUid(int id);
}接着在UserMapper中类似一对多一样补充如下方法
Select(select * from User)
Results({Result(column id, property id),Result(column username, property username),Result(column password, property password),Result(column birthday, property birthday),Result(property roleList,column id,javaType List.class,many Many(select com.example.demo.mapper.RoleMapper.findByUid))
})
ListUser findUserAndRoleAll();最后测试
package com.example.demo;import com.example.demo.domain.User;
import com.example.demo.mapper.UserMapper;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;import java.io.IOException;
import java.io.InputStream;
import java.util.List;public class DemoApplication {public static void main(String[] args) throws IOException {
// 1. 创建SqlSessionFactoryBuilder对象SqlSessionFactoryBuilder sqlSessionFactoryBuilder new SqlSessionFactoryBuilder();
// 2. 加载SqlMapConfig.xml配置文件InputStream inputStream Resources.getResourceAsStream(sqlMapConfig.xml);
// 3. 创建SqlSessionFactory对象SqlSessionFactory sqlSessionFactory sqlSessionFactoryBuilder.build(inputStream);
// 4. 获取SqlSessionSqlSession sqlSession sqlSessionFactory.openSession();UserMapper mapper sqlSession.getMapper(UserMapper.class);ListUser userList mapper.findUserAndRoleAll();for (User user : userList) {System.out.println(user);}// 6. 释放资源sqlSession.close();}
}结果如下
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/924407.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!