mybatis(二):实现“增删改查” 前言一、MyBatis的增删改查1、添加2、修改3、删除4、查询4.1 查询一个实体4.1 查询集合 二、MyBatis获取参数值的两种方式(
本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主!也许一个人独行,可以走的很快,但是一群人结伴而行,才能走的更远!
UserMapper
接口:
int insertUser();
UserMapper.xml
:
<insert id="insertUser"> insert into t_user values(null,'张三','123',23,'女') insert>
UserMapper
接口:
void updateUser();
UserMapper.xml
:
<update id = "updateUser"> update t_user set username = '张三' where id = 4 update>
UserMapper
接口:
void deleteUser();
UserMapper.xml
:
<delete id="deleteUser"> delete from t_user where id = 5 delete>
UserMapper
接口:
User getUserId();
UserMapper.xml
<select id="getUserById" resultType="com.ir.mybaits.pojo.User"> select * from t_user where id = 3 select>
UserMapper
接口:
List<User> getAllUser();
UserMapper.xml
:
<select id="getAllUser" resultType="User"> select * from t_user select>
注意:
⭕ 查询的标签
select
必须设置属性resultType
或resultMap
,用于设置实体类和数据库表的映射关系
●resultType
:自动映射,用于属性名和表中字段名一致的情况
●resultMap
:自定义映射,用于一对多或多对一或字段名和属性名不一致的情况
⭕当查询的数据为多条时,不能使用实体类作为返回值,只能使用集合,否则会抛出异常
TooManyResultsException
,但是若查询的数据只有一条,可以使用实体类或集合作为返回值
MyBatis
获取参数值的两种方式:${}
和#{}
⭕
${}
的本质就是字符串拼接,使用字符串拼接的方式拼接sql
,若为字符串类型或日期类型的字段进行赋值时,需要手动加单引号;
⭕
#{}
的本质就是占位符赋值,但是#{}使用占位符赋值的方式拼接sql
,此时为字符串类型或日期类型的字段进行赋值时,可以自动添加单引号
⭕ 若
mapper
接口中的方法参数为单个的字面量类型,此时可以使用${}
和#{}
以任意的名称获取参数的值,但是需要注意${}
的单引号问题
⭕ 代码演示:
UserMapper
User getUserByUsername(String username);
UserMapper.xml
<select id="getUserByUsername" resultType="user"> select * from t_user where username = #{username}; select>
UserMapperTest
@Test public void getUserByUsername(){ UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class); System.out.println(userMapper.getUserByUsername("张三")); }
⭕
mapper
接口方法的参数为多个时,此时MyBatis
会将这些参数放在一个map
集合中,以两种方式进行存储
- 以
arg0
,arg1
…为键,以参数为值- 以
param1
,param2
…为键,以参数为值因此只需要通过
${}
和#{}
访问map
集合的键就可以获取相对应的 值,但是需要注意${}的单引号问题。
⭕ 代码演示:
UserMapper
User checkLoginByParameter(String username,String passWord);
UserMapper.xml
<select id="checkLoginByParameter" resultType="user"> select * from t_user where username=#{arg0} and password=#{arg1}; select>
UserMapperTest
@Test public void checkLoginByParam(){ UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class); User user = userMapper.checkLoginByParameter("张三","123"); System.out.println(user); }
⭕ 若
mapper
接口中的方法需要的参数为多个时,此时可以手动创建map
集合,将这些数据放在map
中,只需要通过${}
和#{}
访问map
集合的键就可以获取相对应的值,但是需要注意${}
的单引号问题
⭕ 代码演示:
UserMapper
User checkLoginByMap(Map<String, Object> map);
UserMapper.xml
<select id="checkLoginByMap" resultType="user"> select * from t_user where username=#{username} and password=#{password}; select>
UserMapperTest
@Test public void checkLoginByMap(){ UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class); Map<String,Object> map = new HashMap<>(); map.put("username","张三"); map.put("password","123"); User user = userMapper.checkLoginByMap(map); System.out.println(user); }
⭕ 若
mapper
接口中的方法参数为实体类对象时,此时可以使用${}
和#{}
,通过访问实体类对象中的属性名获取属性值,但是需要注意${}
的单引号问题
⭕ 代码演示:
UserMapper
Integer insertUser(User user);
UserMapper.xml
<select id="insertUser" > insert into t_user values(null,#{username},#{password},#{age},#{sex},#{email}) select>
UserMapperTest
@Test public void insertUser(){ UserMapper userMapper = SqlSessionUtils.getSqlSession().getMapper(UserMapper.class); Integer result = userMapper.insertUser(new User(null,"喜羊羊","123456",18,"男","123123@qq.com")); System.out.println(result); }
⭕ 可以通过
@Param
注解标识mapper
接口中的方法参数,此时,会将这些参数放在map
集合中,以如下两种方式来取值访问:
- 以
@Param
注解的value
属性值为键,以参数为值;- 以
param1
,param2
…为键,以参数为值;只需要通过
${}
和#{}
访问map
集合的键就可以获取相对应的值,但是需要注意${}
的单引号问题
⭕ 代码演示:
UserMapper
User checkLoginByParam(@Param("username") String username, @Param("password") String password);
UserMapper.xml
<select id="checkLoginByParam" resultType="User"> select * from t_user where username = #{username} and password = #{password} select>
UserMapperTest
@Test public void testCheckLoginByParam(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); User user = mapper.checkLoginByParam("admin", "123456"); System.out.println(user); }
将以上五种情况分为两类情况
⭕ 情况一:参数为实体类型
⭕ 情况二:参数都用@Param
来修饰
SelectMapper
User getUserById(@Param("id") Integer id);
SelectMapper.xml
<select id="getUserById" resultType="user"> select * from t_user where id= #{id}; select>
SelectMapperTest
@Test public void getUserById(){ SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class); User user = selectMapper.getUserById(3); System.out.println(user); }
SelectMapper
List<User> getAllUser();
SelectMapper.xml
<select id="getAllUser" resultType="user"> select * from t_user; select>
SelectMapperTest
@Test public void getAllUser(){ SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class); List<User> list = selectMapper.getAllUser(); for (User user:list ) { System.out.println(user); } }
在MyBatis
中,对于Java
中常用的类型都设置了类型别名
Alias | Mapped Type |
---|---|
_byte | byte |
_char (since 3.5.10) | char |
_character (since 3.5.10) | char |
_long | long |
_short | short |
_int | int |
_integer | int |
_double | double |
_float | float |
_boolean | boolean |
string | String |
byte | Byte |
char (since 3.5.10) | Character |
character (since 3.5.10) | Character |
long | Long |
short | Short |
int | Integer |
integer | Integer |
double | Double |
float | Float |
boolean | Boolean |
date | Date |
decimal | BigDecimal |
bigdecimal | BigDecimal |
biginteger | BigInteger |
object | Object |
date[] | Date[] |
decimal[] | BigDecimal[] |
bigdecimal[] | BigDecimal[] |
biginteger[] | BigInteger[] |
object[] | Object[] |
map | Map |
hashmap | HashMap |
list | List |
arraylist | ArrayList |
collection | Collection |
iterator | Iterator |
SelectMapper
Integer getCount();
SelectMapper.xml
<select id="getCount" resultType="int"> select count(1) from t_user; select>
SelectMapperTest
@Test public void getCount(){ SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class); int result = selectMapper.getCount(); System.out.println(result); }
SelectMapper
Map<String,Object> getUserByIdToMap(@Param("id")Integer id);
SelectMapper.xml
<select id="getUserByIdToMap" resultType="map"> select * from t_user where id=#{id}select>
SelectMapperTest
@Test public void getUserByIdToMap(){ SelectMapper selectMapper = SqlSessionUtils.getSqlSession().getMapper(SelectMapper.class); System.out.println(selectMapper.getUserByIdToMap(5)); //{password=123456, sex=男, id=5, age=18, email=123123@qq.com, username=喜羊羊} }
方式一:
SelectMapper
List<Map<String, Object>> getAllUserToMap();
SelectMapper.xml
<select id="getAllUserToMap" resultType="map"> select * from t_user select>
SelectMapperTest
@Test public void testGetAllUserToMap(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); System.out.println(mapper.getAllUserToMap()); }
方式二:
SelectMapper
@MapKey("id") Map<String, Object> getAllUserToMap();
SelectMapper.xml
<select id="getAllUserToMap" resultType="map"> select * from t_user select>
SelectMapperTest
@Test public void testGetAllUserToMap(){ SqlSession sqlSession = SqlSessionUtils.getSqlSession(); SelectMapper mapper = sqlSession.getMapper(SelectMapper.class); System.out.println(mapper.getAllUserToMap()); }
MyBatis
的各种查询功能:
⭕ 若查询出的数据只有一条
● 可以通过实体类对象接收
● 可以通过list
集合接收
● 可以通过map
集合接收
结果:
{password=123456, sex=男, id=3, age=23, email=12345@qq.com, username=admin}
⭕ 若查询出的数据有多条
● 可以通过实体类类型的list
集合接收
● 可以通过map
类型的list
集合接收
●可以在mapper
接口的方法上添加@MapKey
注解,此时就可以将每条数据转换的map
集合作为值,以某个字段的值作为键,放在同一个map
集合中
⭕ 注意:一定不能通过实体类对象接收,此时会抛异常
TooManyResultsException
来源地址:https://blog.csdn.net/weixin_52533007/article/details/125621655
--结束END--
本文标题: Mybatis(二):实现“增删改查”
本文链接: https://lsjlt.com/news/425297.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0