Mybatis1.0——框架入门,从0到简单增删改查数据

JavaWeb框架学习文章
首先是准备Mybatis的jar包
Mybatis下载地址
1,导入Mybatis-x.x.x.jar和lib中的依赖包
2,导入要使用的数据库的驱动包
3,创建一个config文件,在config文件夹下创建一个log4j.properties
打开mybatis自带的pdf,翻到logging配置中找需要的配置信息,大概如下
配置log4j.properties
这里贴出mybatis-3.4.6中的信息

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

由于我们在开发阶段,所以上述内容中的ERROR也就是日志级别,建议改成DEBUG,投入工作后可以用INFO,ERROR
4,在config下创建一个SqlMapConfig.xml文件

<?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">
			<!-- 使用jdbc事务管理 -->
			<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="sqlmap/user.xml"/>
	</mappers>
	
</configuration>

5,在config中创建一个sqlmap包,然后包内创建一个user.xml

<?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命名空间:对sql进行分类化管理,隔离sql -->
<mapper namespace="test">
		<!-- 用来查询 
				id:用来标识这条select
				parameterType:传入的参数类型
				resultType:返回的sql映射成的java对象类型
				
				#{}表示一个占位符
				#{}中如果要输入的参数名是简单类型,那么参数名可以任意:如#{id},#{value}
				${}表示将接收到的参数不加任何修饰拼接到sql中
				${value},如果接受的类型是简单类型,参数只能填value
				${}的方式 可能引起sql注入,不推荐使用
		-->
		<select id="findUserById" parameterType="int" resultType="com.hhh.dao.User">
			select * from user where id = #{id}
		</select>
		
		<select id="findUserByName" parameterType="java.lang.String" resultType="com.hhh.dao.User">
			select * from user where name like '%${value}%'
		</select>
</mapper>

6,在src包下创建常见的User对象,该对象对应数据库中的表,user.xml中的返回类型也就是它
7,创建测试类(主要测试的是单项结果查询,和多项结果查询)

package com.hhh.test;

import java.io.InputStream;
import java.util.List;
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 org.junit.Test;

import com.hhh.dao.User;

public class MyTest {
	@Test
	public void test1() throws Exception {
		//读取mybatis配置文件
		InputStream in = Resources.getResourceAsStream("SqlMapConfig.xml");//由于创建的是源码包,所以可以直接读
		
		//创建会话工厂,传入配置信息
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(in);
		
		//通过工厂得到SqlSession
		SqlSession sqlSession = sqlSessionFactory.openSession();
	
		/*
		 * 通过SqlSession操作数据库
		 * 参数1:命名空间和sql的id
		 * 参数2: 传向占位符的值
		 * */
		User user = sqlSession.selectOne("test.findUserById",1);
		System.out.println(user);
		
		List<User> selectList = sqlSession.selectList("test.findUserByName","张三");
		System.out.println(selectList);
		sqlSession.close();
	}
}


运行结果:

DEBUG [main] - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 422392391.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@192d3247]
DEBUG [main] - ==>  Preparing: select * from user where id = ? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
User [id=1, name=张三1, age=20, tel=12341]
DEBUG [main] - ==>  Preparing: select * from user where name like '%张三%' 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 2
[User [id=1, name=张三1, age=20, tel=12341], User [id=2, name=张三2, age=21, tel=12342]]

插入数据:
修改user.xml

		<!-- 
			向user表中插入信息
			由于id自增所以不需要填
		 -->
		<insert id="insertInfoToUser" parameterType="com.hhh.dao.User">
			insert into user(name, age, tel) values(#{name},#{age},#{tel})
		</insert>

测试类:

		User user = new User("王五3",18,"12346");
		sqlSession.insert("test.insertInfoToUser", user);
		sqlSession.commit();//如果不提交将会回滚事务

运行结果:

DEBUG [main] - Opening JDBC Connection
DEBUG [main] - Created connection 1181869371.
DEBUG [main] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@4671e53b]
DEBUG [main] - ==>  Preparing: insert into user(name, age, tel) values(?,?,?) 
DEBUG [main] - ==> Parameters: 王五3(String), 18(Integer), 12346(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@4671e53b]

获取自增长的id值:
修改user.xml

		<insert id="insertInfoToUser" parameterType="com.hhh.dao.User">
			insert into user(name, age, tel) values(#{name},#{age},#{tel})
			<!-- keyProperty:参数名
				 order:插入后获取
				 resultType:返回值类型
			 -->
			<selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
				select last_insert_id();
			</selectKey>
		</insert>

修改测试类:

		User user = new User("王五3",18,"12346");
		sqlSession.insert("test.insertInfoToUser", user);
		sqlSession.commit();//如果不提交将会回滚事务
		System.out.println(user.getId());

结果:

DEBUG [main] - ==>  Preparing: insert into user(name, age, tel) values(?,?,?) 
DEBUG [main] - ==> Parameters: 王五3(String), 18(Integer), 12346(String)
DEBUG [main] - <==    Updates: 1
DEBUG [main] - ==>  Preparing: select last_insert_id(); 
DEBUG [main] - ==> Parameters: 
DEBUG [main] - <==      Total: 1
DEBUG [main] - Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@6950e31]
9

删除用户:
修改user.xml

		<delete id="deleteById" parameterType="java.lang.Integer">
			delete from user where id = #{id}
		</delete>

测试类:

		sqlSession.delete("deleteById", 6);
		sqlSession.commit();

修改用户:
修改user.xml

		<update id="updateUser" parameterType="com.hhh.dao.User">
			update user set name = #{name} where id = #{id}
		</update>

需要注意的是这里的参数不是简单类型,所以不能够随便填,字段名和属性名需要对应。由于根据id修改数据,所以这里传入的属性必须要有id值。

		User user = new User("王五3",18,"12346");
		user.setId(5);
		sqlSession.update("updateUser", user);
		sqlSession.commit();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值