MyBatis----B(使用 调用)

Hello MyBatis
1、下载添加jar包
mybatis-3.4.5.jar     lib/*.jar可以添加也可以不添加
添加对应的数据库驱动 
2、创建数据库的表结构
create table t_users(
id bigint primary key auto_increment,
username varchar(20) not null,
password varchar(20) not null
)engine=innodb default charset utf8;
3、添加核心配置文件位于src/根目录下,名称没有强制要求,一般建议可以使用mybatis-config.xml
核心配置文件中主要定义3方面的内容:
1、数据库连接的相关配置
2、MyBatis的运行时常量,例如是否使用二级缓存
3、注册映射元文件,映射元文件用于说明实体类和表之间的对应关系,同时定义对应的SQL语句

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 文件头可以在pdf文档中进行查找-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!-- 在mybatis中可以定义多个不同的运行环境配置,default用于指定所使用的默认环境配置。在一般的开发中至少会配置两个,一个用于开发,一个是生成环境 -->
<environments default="yan">
<environment id="yan">
<!-- 事务管理器的配置,其中可以配置的类型有两种:
1:JDBC表示的是非分布式事务管理器,底层的具体实现实际上就是JDBC的事务编程
Connection conn=....
conn.setAutoCommit(false);
......
conn.commit()/rollback();

2:Manage这个配置几乎没做什么,一般用于分布式应用。它从来不提交或回滚一个连接。  而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认 情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false -- 

            <transactionManager type="JDBC"/>

            <!-- 每个运行环境中会配置两方面,一个是数据源,一个是事务管理器 -->

            <!-- dataSource用于定义数据源,可以设置不同的类型type,


        1:UNPOOLED直连方式,需要连接则创建,使用完毕则关闭,一般不能使用,效率太差了。 
2:POOLED池化连接,则使用MyBatis所提供的一个连接池,可以在开发或者产品时使用.
3:JNDI:使用由容器(Tomcat)所提供的连接池,由于需要容器的支持,所以一般只用于产品 -->

<dataSource type="POOLED">


<!-- 建立连接池,至少需要配置driver驱动串、url连接串、username用户名、password口令 -->
<property name="driver" value="************************"/>
<property name="url" value=*******************"/>
<property name="username" value="****************"/>
<property name="password" value="***************"/>
<!-- 还可以继续配置最大连接数等连接池相关设置 -->
</dataSource>
</environment>
</environments>
<!-- 用于注册映射元文件 -->
<mappers></mappers>
</configuration>


4、定义表所对应的实体类和其对应的映射元文件
            public class UserBean implements Serializable {
            private static final long serialVersionUID = -4449222544558631368L;
            private Long id;
            private String username;
            private String password;

映射元文件,名称没有规则,但是为了开发的方便,一般位置和实体类的位置一致,名称为"实体类名-mapper.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用于定义名空间,具体的名称没有规则,只要实现唯一即可。

一般有两种定义方法:

       方法1:采用实体bean的全名(ibatis的方法),

       方法2:使用一个独立的接口的全名(mybatis的方法)-->

<mapper namespace="*****类全名******">
<!-- 
定义对应的增insert删delete改update查select的SQL语句
 -->
 <!-- 定义插入的SQL语句,其中有属性id用于指代对应的语句,名称没有规则,但是不允许重复
  parameterType用于指定执行操作时的参数类型,可以使用全名,也可以使用别名
  -->
 <insert id="insert" parameterType="*****类全名******">
  <!-- 可以使用#{}这样的OGNL表达式从参数中获取对应属性的值 
  #{}中的是属性名称,之外的是列名称
  -->
  insert into t_users(username,password) values(#{username},#{password})
 </insert>
</mapper>


注册映射元文件,修改mybatis-config.xml
<!-- 用于注册映射元文件 -->
<mappers>
<mapper resource="com/yao/entity/UserBean-mapper.xml"/>
</mappers>

否则则执行操作时会抛出异常PersistenceException
Mapped Statements collection does not contain value for com.yan.entity.UserBean.insert


5、编程调用

public class T1 {
public static void main(String[] args) throws IOException {
// 获取读取核心配置文件的输入流
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//创建SqlSession对象的工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is);
//创建SqlSession对象,SqlSession对象充当了实体管理器功能,提供了最基本的CRUD的方法
SqlSession session=factory.openSession();

UserBean user=new UserBean();
user.setUsername("*******");
user.setPassword("********");

//调用映射元文件中所定义的<insert id="insert"对应的SQL语句
//增删改方法返回值为int,表示受影响行数
int len=session.insert("com.yao.entity.UserBean.insert",user);

//注意:一般持久层框架都默认事务回滚,如果需要修改生效,则需要手动提交事务
session.commit();

//由于session对象是Connection连接对象的浅封装,所以必须及时关闭  try/finally
session.close();
}
}


按照id执行删除操作,请注意一般使用MyBatis之类的持久层框架时要求表中应该有主键
<delete id="delete" parameterType="java.lang.Long">
  <!-- 因为这里不是值bean类型,是一个独立的数据,所以名称可以随便写#{id}也可以#{abc} -->
  delete from t_users where id=#{id}
</delete>


int len=session.delete("com.yao.entity.UserBean.delete",3L);


按照id加载对应的值bean(一行数据对应一个值bean)
<!-- resultType用于指定对应的返回值类型,要求列名称和对应的类型属性名一致 -->
 <select id="load" parameterType="java.lang.Long" resultType="com.yao.entity.UserBean">
  select * from t_users where id=#{abc}
 </select>
 
UserBean user=session.selectOne("com.yao.entity.UserBean.load",1L);
System.out.println(user);




修改操作,按照id修改非id属性
<update id="update" parameterType="com.yao.entity.UserBean">
  update t_users set username=#{username},password=#{password} where id=#{id}
</update>


UserBean user=session.selectOne("com.yao.entity.UserBean.load",4L);
user.setUsername("*********");
user.setPassword("**********");
int len=session.update("com.yan.entity.UserBean.update",user);
System.out.println(len);

猜你喜欢

转载自blog.csdn.net/seamon_love/article/details/80992206