1.可以通过配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自动扫描 --> <context:component-scan base-package="gamedataserver"></context:component-scan> <!-- 引入配置文件 --> <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:jdbc.properties" /> </bean> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${driver}" /> <property name="url" value="${url}" /> <property name="username" value="${username}" /> <property name="password" value="${password}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <bean id="dataSourceEx" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- 数据库基本信息配置 --> <property name="driverClassName" value="${driver}" /> <property name="url" value="${urlEx}" /> <property name="username" value="${usernameEx}" /> <property name="password" value="${passwordEx}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <bean id="dataSourceThree" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <!-- 数据库基本信息配置 --> <property name="driverClassName" value="${driver}" /> <property name="url" value="${urlThree}" /> <property name="username" value="${usernameThree}" /> <property name="password" value="${passwordThree}" /> <!-- 初始化连接大小 --> <property name="initialSize" value="${initialSize}"></property> <!-- 连接池最大数量 --> <property name="maxActive" value="${maxActive}"></property> <!-- 连接池最大空闲 --> <property name="maxIdle" value="${maxIdle}"></property> <!-- 连接池最小空闲 --> <property name="minIdle" value="${minIdle}"></property> <!-- 获取连接最大等待时间 --> <property name="maxWait" value="${maxWait}"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 第一个数据库链接--> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <!-- 自动扫描mapping.xml文件 --> <property name="mapperLocations" value="classpath:gamedataserver/mapping/one/*.xml"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 第二个数据库链接 --> <bean id="sqlSessionFactoryEx" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSourceEx" /> <!-- mapper扫描 --> <property name="mapperLocations" value="classpath:gamedataserver/mapping/two/*.xml"></property> </bean> <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 第二个数据库链接 --> <bean id="sqlSessionFactoryThree" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSourceThree" /> <!-- mapper扫描 --> <property name="mapperLocations" value="classpath:gamedataserver/mapping/three/*.xml"></property> </bean> <!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="gamedataserver.dao.one" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> <!-- DAOEx接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="gamedataserver.dao.two" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryEx"></property> </bean> <!-- DAOEx接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="gamedataserver.dao.three" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryThree"></property> </bean> <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx --> <bean name="transactionManagerEx" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSourceEx"></property> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <bean id="transactionManagerThree" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSourceThree" /> </bean> <!-- 配置自定义Realm --> <bean id="myRealm" class="shiro.MyRealm"/> <!-- 安全管理器 --> <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="realm" ref="myRealm"/> </bean> <!-- Shiro过滤器 核心--> <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean"> <!-- Shiro的核心安全接口,这个属性是必须的 --> <property name="securityManager" ref="securityManager"/> <!-- 身份认证失败,则跳转到登录页面的配置 --> <property name="loginUrl" value="/jsp/admin/loginIndex.jsp"/> <!-- 权限认证失败,则跳转到指定页面 --> <property name="unauthorizedUrl" value="/jsp/admin/nopower.jsp"/> <!-- Shiro连接约束配置,即过滤链的定义 --> <property name="filterChainDefinitions"> <value> <!--anon 表示匿名访问,不需要认证以及授权--> /css/=anon /js/=anon /fonts/=anon /img/=anon /loginIndex=anon <!--authc表示需要认证 没有进行身份认证是不能进行访问的--> /jsp/sysconfig/*=authc,roles[superadmin] /jsp/moneyRecord/*=authc /jsp/index.jsp=authc,roles[superadmin] /jsp/index_player.jsp=authc,roles[admin] </value> </property> </bean> <!-- 保证实现了Shiro内部lifecycle函数的bean执行 --> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> <!-- 开启Shiro注解 --> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"/> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean> </beans>
这里有三个数据源
2.可以通过注解(不需要mapping.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> <!-- <properties resource="mybatis/jdbc.properties"/> --> <typeAliases> <typeAlias alias="Player" type="gamedataserver.model.Player"/> <typeAlias alias="ServerConfig" type="gamedataserver.model.ServerConfig"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> </dataSource> </environment> </environments> <mappers> <mapper class="gamedataserver.dao.one.PlayerMapper"/> <mapper class="gamedataserver.dao.two.ServerConfigMapper"/> </mappers> </configuration>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | package gamedataserver.dao.one; import java.util.List; import java.util.Map; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import gamedataserver.model.Player; public interface PlayerMapper { @Delete ( "DELETE FROM tbl_Player where id=#{id}" ) int deleteByPrimaryKey(Long id); int insert(Player record); int insertSelective(Player record); @Select ( "SELECT * FROM tbl_Player where id=#{id}" ) Player selectByPrimaryKey(Long id); int updateByPrimaryKeySelective(Player record); @Update ( "update tbl_Player set UserName = #{username,jdbcType=VARCHAR} ,UserPass = #{userpass,jdbcType=VARCHAR}," + "SessionKey = #{sessionkey,jdbcType=VARCHAR}," + "GameMoney = #{gamemoney,jdbcType=BIGINT}," + "RealName = #{realname,jdbcType=VARCHAR}," + "OpenRoomFreeTimes = #{openroomfreetimes,jdbcType=INTEGER}," + "IsMember = #{ismember,jdbcType=INTEGER}," + "UnionId = #{unionid,jdbcType=VARCHAR}," + "HeadUrl = #{headurl,jdbcType=VARCHAR}," + "Sex = #{sex,jdbcType=INTEGER}," + "Diamond = #{diamond,jdbcType=INTEGER}," + "GoldenFlowerCard = #{goldenflowercard,jdbcType=INTEGER}," + "BullCard = #{bullcard,jdbcType=INTEGER}," + "MahjongCard = #{mahjongcard,jdbcType=INTEGER}," + "LoginTime = #{logintime,jdbcType=BIGINT}," + "LogoutTime = #{logouttime,jdbcType=BIGINT}," + "CreateTime = #{createtime,jdbcType=BIGINT}," + "IsOnLine = #{isonline,jdbcType=INTEGER}," + "Version = #{version,jdbcType=VARCHAR} " + "where ID = #{id,jdbcType=BIGINT}" ) int updateByPrimaryKey(Player record); @Select ( "SELECT * FROM tbl_Player" ) public List<Player> selectAllPlayer(); //这个是start limit List<Player> selectPlayerByStartLimit(Map params); //这个是 where int selectPlayerByWhere(Map params); @Select ( "SELECT count(*) FROM tbl_Player where CreateTime>=#{timeStartStamp} and CreateTime<=#{timeEndStamp}" ) int selectPlayerCountByCreateTime(Map<String,Long> map); } |
鼓励:觉得写得有帮助就支付宝扫一下吧,对你没有损失,也给我动力
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现