设为首页 收藏本站
查看: 735|回复: 0

[经验分享] mybatis学习笔记(一) 入门demo

[复制链接]

尚未签到

发表于 2016-11-26 02:18:16 | 显示全部楼层 |阅读模式
  1:通过java代码

package org.mybatis.dao;
import java.sql.SQLException;
import java.util.List;
import javax.sql.DataSource;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.Configuration;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.mybatis.entity.GameServer;
import org.mybatis.mapper.GameServerMapper;
/**
* SqlSessionFactoryBuilder:这个类可以被实例化,使用和丢弃。一旦你创建了SqlSessionFactory后,这个类就不需要存在了。
*    因此SqlSessionFactoryBuilder实例的最佳范围是方法范围(也就是本地方法变量)。
*                           可以重用SqlSessionFactoryBuilder来创建多个SqlSessionFactory实例
* SqlSessionFactory:SqlSessionFactory的最佳范围是应用范围。可以通过单利,静态方法,容器注入等方式实现
* SqlSession:每个线程都应该有它自己的SqlSession实例。SqlSession的实例不能被共享,也是线程不安全的
* Mapper:映射器接口的实例可以从SqlSession中获得。那么从技术上来说,当被请求时,任意映射器实例的最宽范围和SqlSession是相同的。
*         然而,映射器实例的最佳范围是方法范围。也就是说,它们应该在使用它们的方法中被请求,然后就抛弃掉。它们不需要明确地关闭                          
* @ClassName: MyBatisDao
* @Description:
* @author
*/
public class MyBatisDao {
private static final String driver = "oracle.jdbc.driver.OracleDriver";
private static final String url =  "jdbc:oracle:thin:@ip:port:database";
private static final String userName = "XXX";
private static final String password = "XXX";
private static final SqlSessionFactory sessionFactory;
static {
DataSource dataSource = new PooledDataSource(driver, url, userName, password);
TransactionFactory transactionFactory = new JdbcTransactionFactory();
Environment environment = new Environment("development", transactionFactory, dataSource);
Configuration config = new Configuration(environment);
config.addMappers("org.mybatis.mapper");
sessionFactory = new SqlSessionFactoryBuilder().build(config);
}
public SqlSession getSqlSession() {
return sessionFactory.openSession();
}
//通过这种方式操作数据库,对应的Mapper接口仍然是必须得
public void queryBySession() {
SqlSession session = sessionFactory.openSession();
List<GameServer> ss = session.selectList("org.mybatis.mapper.GameServerMapper.getAllGames");
System.out.println(ss.size());
List<GameServer> server = session.selectOne("org.mybatis.mapper.GameServerMapper.getGamePartition",null);
System.out.println(server==null);
session.close();
}
private void queryByMapper() {
SqlSession session = sessionFactory.openSession();
GameServerMapper mapper = session.getMapper(GameServerMapper.class);
List<GameServer> list = mapper.getAllGames();
System.out.println(list.size());
List<GameServer> list2 = mapper.getGamePartition(null);
System.out.println(list2==null);
session.close();
}
public static void main(String[] args) throws SQLException, ClassNotFoundException {
MyBatisDao dao = new MyBatisDao();
dao.queryBySession();
dao.queryByMapper();
}
}


package org.mybatis.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Select;
import org.mybatis.entity.GameServer;
public interface GameServerMapper {
/**
* 注解方式不适合于复杂的语句
* @Title: getGameInfo
* @Description:
* @return
*/
@Select("SELECT ID,NAME FROM GAME_SERVER WHERE PID=0 ORDER BY ID DESC")
List<GameServer> getAllGames();
/**
* @Title: getGamePartition
* @Description:
* @param gameId
* @return
*/
List<GameServer> getGamePartition(Long gameId);
}


<?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="org.mybatis.mapper.GameServerMapper">
<!-- 如果没有定义别名,这里的resultType必须使用完整的包名加类名 -->
<!-- <select id="getAllGames" resultType="org.mybatis.entity.GameServer">
<![CDATA[
SELECT ID,NAME FROM GAME_SERVER WHERE PID=0 ORDER BY ID DESC
]]>
</select> -->
<!-- #{}条件通过指定第二个参数jdbcType,在传入的参数为空时也能正常执行;同样适用于insert操作 -->
<select id="getGamePartition" parameterType="java.lang.Long" resultType="org.mybatis.entity.GameServer">
<![CDATA[
SELECT ID,NAME FROM GAME_SERVER WHERE PID=#{gameId,jdbcType=NUMERIC} ORDER BY ID DESC
]]>
</select>
</mapper>
 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pps</groupId>
<artifactId>mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.1.2.RELEASE</version>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.1.1</version>
</dependency>
<dependency>
<groupId>ojdbc</groupId>
<artifactId>ojdbc</artifactId>
<version>14</version>
</dependency>
</dependencies>
</project>


2:通过配置文件
<?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>
<!-- 定义属性并指定属性文件 -->
<properties resource="jdbc.properties">
<property name="username" value="GCWO_DEV"/>
<property name="password" value="GCWO_DEV"/>
</properties>
<environments default="development">
<environment id="develop">
<!--
1:JDBC直接依赖JDBC的提交和回滚设置
2:MANAGED几乎不做任何事情,既不会提交也不会回滚事物,而是交给容器来管理事物声明周期
-->
<transactionManager type="JDBC"></transactionManager>
<!--
1:UNPOOLED这个数据源的实现是每次被请求时简单打开和关闭连接。
2:POOLED这是JDBC连接对象的数据源连接池的实现,用来避免创建新的连接实例
3:JNDI这个数据源的实现是为了使用如Spring或应用服务器这类的容器,容器可以集中或在外部配置数据源,然后放置一个JNDI上下文的引用。
这个数据源配置只需要两个属性:initial_context data_source
-->
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<proxyFactory type=""></proxyFactory>
<!-- <settings>
<setting name="LazyLoadingEnable" value="false"/>
</settings> -->
<!-- 定义别名,可以使用别名,而不用在每次使用时都指定完整的包名 -->
<typeAliases>
<typeAlias alias="GameServerMapper" type="org.mybatis.mapper.GameServerMapper"/>
</typeAliases>
<!-- 指定类型转换器,需要实现TypeHandler接口 -->
<!-- <typeHandlers>
<typeHandler handler="org.apache.ibatis.type.TypeHandler.DateHandler" javaType="java.util.Date" jdbcType="Date"/>
</typeHandlers> -->
<!-- 每次创建实例使用的方法:继承DefaultObjectFactory -->
<!-- <objectFactory type="org.apache.ibatis.type.factory.MyObjectFactory"></objectFactory> -->
<!-- 在某一点拦截已经映射语句的调用。实现Interceptor接口,通过注解指定需要拦截的操作等信息 -->
<!-- <plugins>
<plugin interceptor="org.apache.ibatis.type.plugin.InsertPlugin"></plugin>
</plugins> -->
<!-- 告诉Mybatis,到哪里寻找映射文件 -->
<mappers>
<mapper resource="org/mybatis/mapper/PlayerMapper.xml" />
</mappers>
</configuration>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-305465-1-1.html 上篇帖子: MyBatis Mapper XML 文件 02 下篇帖子: Mybatis自动生成Mapper工具配置文件
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表