Mybatis 框架总结(二) :增删改查

增删改查的语句都是在xml里面编写的,到时候直接调用。接下来的操作是对book这个表的增删改查


insert

因为用的是mysql,在设计表的时候设置的id是自动生成的,所以并不用写上

<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace必须定义,非绑定到类或是接口的方式 -->
<mapper namespace="sdibt.lxj.entity.Book">
	<!-- 增加一本书 -->
  <insert id="insert1">
     	insert into book(book_name,book_price,book_page) values('mysql',30.2,500);
  </insert>
</mapper>

测试,因为是增删改语句,所以必须要提交事务

//创建session
		SqlSession session = sf.openSession();		
		session.insert("sdibt.lxj.entity.Book.insert1");
		//提交事务
		session.commit();

insert语句插入的值一般会是用户传来的数据 ,所以对刚才的语句进行修改,parameterType="java.util.Map"表示传来的参数类型,通常是传来一个map集合,也可以简写成parameterType="map",#{bookName}表示的是map里面的key对应的value

<!-- 增加一本书 -->
  <insert id="insert1" parameterType="java.util.Map">
     	insert into book(book_name,book_price,book_page) values(#{bookName},#{bookPrice},#{bookPage})
  </insert>

测试

Map map = new HashMap();
		map.put("bookName", "c++");		
		map.put("bookPrice", 60.6);
		map.put("bookPage", 3000);
		
		session.insert("sdibt.lxj.entity.Book.insert1",map);
		//提交事务
		session.commit();

delete

<!-- 删除id为1的书 -->
  <delete id="delete1" parameterType="int">
  	delete from book where id=#{id}
  </delete>

测试

session.delete("sdibt.lxj.entity.Book.delete1",1);
		//提交事务
		session.commit();

update

<!-- update语句  将id为3,页数改为1000-->
    <update id="update1" parameterType="map">
    	update book set book_page=#{bookPage} where id=#{id}
</update>

测试

	Map map = new HashMap();
		map.put("id", 3);
		map.put("bookPage", 1000);
		
		session.update("sdibt.lxj.entity.Book.update1",map);
		//提交事务
		session.commit();

有时候用户在更新的时候可能只修改一行的某一部分,比如这个用户要修改书名和页数,那个用户要修改书名和价格,其他的参数不变。针对这样的业务如果写很多的sql语句就太麻烦了,所以动态sql可以解决这一方案。trim标签里包含的是可能要进行更新的值,如果用户传来的某一个数据是空,那么将不会进行修改。prefix="set" 表示这些语句的前缀 suffix=""  表示这些语句的后缀   suffixOverrides=","  指定去除的多余的后缀内容 prefixOverrides="" 指定去除的多余的前缀内容

<!-- 动态更新 -->
	<update id="dynamicUpdate" parameterType="map">
		update book
		<trim prefix="set" suffixOverrides=",">
			<if test="bookName!=null">
				book_name=#{bookName},
			</if>
			<if test="bookPrice!=null">
				book_price=#{bookPrice},
			</if>	
		</trim>
		where id=#{id}		
	</update>

测试,只修改书的名字


Map map = new HashMap();
		map.put("id", 2);
		map.put("bookName", "c++++");		
//		map.put("bookPrice", 60.6);
		
		session.update("sdibt.lxj.entity.Book.dynamicUpdate",map);
		//提交事务
		session.commit();

查询

1.查询所有书本,返回类型是一个map集合

<select id="all" resultType="map">
		select * from book
	</select>

测试

List<Map> lst = session.selectList("sdibt.lxj.entity.Book.all");
		for (Map map : lst) {
			System.out.println(map.get("book_name")+"  "+map.get("book_price"));
		}

2.查询部分列,返回值也是个map类型

<select id="allReturnPart" resultType="map">
		select book_name,book_price from book
	</select>

3.查询id为3的书本,只有一个参数的情况下#{...},里面可以使任意值

 <select id="allById" resultMap="map" parameterType="int">

    select * from book where id=#{abc}   

      </select>

测试,当确定查询的只有一条数据的时候,可以使用selectOne方法,返回的对象是Object,

//创建session
		SqlSession session = sf.openSession();	
		
		Map map = session.selectOne("sdibt.lxj.entity.Book.allById",7);
		System.out.println(map.get("book_name"));
		System.out.println(map.get("book_price"));

4.多条件查询,单引号,大于号,小于号等出现在xml配置文件sql中要用转义符号。 


 <!-- 多条件查询,要求页数小于1000,名称含有语言两个字,那本书 -->
    <select id="allMultiCondition" resultType="map" parameterType="map">
    	 select * from book where book_page &lt; #{page} and book_name like #{keyword}
      </select>

测试:

//创建session
		SqlSession session = sf.openSession();	
		
		Map map = new HashMap();
		map.put("page", 1000);
		map.put("keyword","%语言%");
		
		List<Map> lst = session.selectList("sdibt.lxj.entity.Book.allMultiCondition",map);
		for (Map map2 : lst) {
			System.out.println(map2.get("book_name")+"  "+map2.get("book_page"));
		}

5.动态sql查询,与动态更新差不多,用trim标签

<!-- trim方式实现动态sql -->
    <select id="dynamicSql1" resultType="map" parameterType="map">
       select * from book 
        <trim prefix="where" prefixOverrides="and | or ">
			      <if test="name!=null">
			       and book_name = #{name}
			  </if>
			   <if test="page!=null">
			       and book_page>#{page}
			  </if>
	  </trim>

6.查询参数是集合的情况,查询book的id是7,8,9的书籍,传来的参数会是一个list集合

<!-- 集合查询,查询book的id是7,8,9的书籍 -->
      <select id="lstSelect" resultType="map" parameterType="java.util.List">
      	select * from book where id in
      	 <foreach collection="list" open="(" close=")" separator=","  item="item">
      	 	#{item}
      	 </foreach>      
      </select>

测试:

		List<Integer> list = new ArrayList<Integer>();
		list.add(7);
		list.add(8);
		list.add(9);
		
		List<Map> lst = session.selectList("sdibt.lxj.entity.Book.lstSelect",list);
		for (Map map : lst) {
			System.out.println(map.get("book_name"));
		}

7.分页查询

//,创建一个分页对象,第一个参数表示从第几个数据开始查,下标从0开始。第二参数表示查询几条数据
		RowBounds rb = new RowBounds(2, 3);		
		//第一个参数表示sql的id,第二参数是参数,第三个参数是分页对象
		List<Map> lst = session.selectList("sdibt.lxj.entity.Book.all", null, rb);
		
		for (Map map : lst) {
			System.out.println(map.get("book_name"));
		}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的使用 MyBatis 框架进行增删改查的示例: 1. 配置文件 在 MyBatis 配置文件中,需要配置数据库连接信息、SQL 映射文件(Mapper)的位置等,例如: ``` <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver" /> <property name="url" value="jdbc:mysql://localhost:3306/test" /> <property name="username" value="root" /> <property name="password" value="123456" /> </dataSource> </environment> </environments> <mappers> <mapper resource="com/example/mappers/UserMapper.xml" /> </mappers> </configuration> ``` 2. 实体类 定义一个实体类,例如: ``` public class User { private Integer id; private String name; private Integer age; // 省略 getter 和 setter 方法 } ``` 3. SQL 映射文件 在 SQL 映射文件中定义 SQL 语句和对应的参数映射,例如: ``` <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="com.example.mappers.UserMapper"> <resultMap id="userMap" type="com.example.entities.User"> <id column="id" property="id" /> <result column="name" property="name" /> <result column="age" property="age" /> </resultMap> <select id="getUserById" resultMap="userMap"> SELECT * FROM users WHERE id = #{id} </select> <insert id="addUser" parameterType="com.example.entities.User"> INSERT INTO users (name, age) VALUES (#{name}, #{age}) </insert> <update id="updateUser" parameterType="com.example.entities.User"> UPDATE users SET name = #{name}, age = #{age} WHERE id = #{id} </update> <delete id="deleteUserById"> DELETE FROM users WHERE id = #{id} </delete> </mapper> ``` 4. Dao 接口 定义一个 Dao 接口,其中的方法名要与 SQL 映射文件中的 id 名称一致,例如: ``` public interface UserDao { User getUserById(Integer id); void addUser(User user); void updateUser(User user); void deleteUserById(Integer id); } ``` 5. Dao 实现类 实现 Dao 接口,使用 MyBatis 提供的 SqlSession 和 Mapper 接口来实现增删改查,例如: ``` public class UserDaoImpl implements UserDao { private SqlSessionFactory sqlSessionFactory; public UserDaoImpl(SqlSessionFactory sqlSessionFactory) { this.sqlSessionFactory = sqlSessionFactory; } @Override public User getUserById(Integer id) { try (SqlSession session = sqlSessionFactory.openSession()) { return session.selectOne("com.example.mappers.UserMapper.getUserById", id); } } @Override public void addUser(User user) { try (SqlSession session = sqlSessionFactory.openSession()) { session.insert("com.example.mappers.UserMapper.addUser", user); session.commit(); } } @Override public void updateUser(User user) { try (SqlSession session = sqlSessionFactory.openSession()) { session.update("com.example.mappers.UserMapper.updateUser", user); session.commit(); } } @Override public void deleteUserById(Integer id) { try (SqlSession session = sqlSessionFactory.openSession()) { session.delete("com.example.mappers.UserMapper.deleteUserById", id); session.commit(); } } } ``` 6. 使用 Dao 接口 使用 Dao 接口中定义的方法来操作数据,例如: ``` public static void main(String[] args) { try (InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml")) { SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); UserDao userDao = new UserDaoImpl(sqlSessionFactory); // 查询用户 User user = userDao.getUserById(1); System.out.println(user.getName() + " " + user.getAge()); // 添加用户 User newUser = new User(); newUser.setName("Tom"); newUser.setAge(20); userDao.addUser(newUser); // 更新用户 User updateUser = new User(); updateUser.setId(1); updateUser.setName("Jerry"); updateUser.setAge(25); userDao.updateUser(updateUser); // 删除用户 userDao.deleteUserById(2); } catch (IOException e) { e.printStackTrace(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值