001package org.lanyonm.playground.config;
002
003import java.util.Date;
004
005import javax.sql.DataSource;
006
007import org.mybatis.spring.SqlSessionFactoryBean;
008import org.mybatis.spring.annotation.MapperScan;
009import org.springframework.context.annotation.Bean;
010import org.springframework.context.annotation.Configuration;
011import org.springframework.jdbc.core.JdbcTemplate;
012import org.springframework.jdbc.datasource.DataSourceTransactionManager;
013import org.springframework.jdbc.datasource.SimpleDriverDataSource;
014
015/**
016 * @author lanyonm
017 */
018@Configuration
019@MapperScan("org.lanyonm.playground.persistence")
020public class DataConfig {
021
022        @Bean
023        public DataSource dataSource() {
024                SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
025                dataSource.setDriverClass(org.h2.Driver.class);
026                dataSource.setUsername("sa");
027                dataSource.setUrl("jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE");
028                dataSource.setPassword("");
029
030                // populate some data
031                JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
032                System.out.println("Creating tables");
033                jdbcTemplate.execute("drop table users if exists");
034                jdbcTemplate.execute("create table users(id serial, firstName varchar(255), lastName varchar(255), email varchar(255))");
035                jdbcTemplate.update("INSERT INTO users(firstName, lastName, email) values (?,?,?)", "Mike", "Lanyon", "lanyonm@gmail.com");
036                jdbcTemplate.execute("drop table todos if exists");
037                jdbcTemplate.execute("create table todos(id serial, title varchar(255), dateCreated date, dateModified date)");
038                jdbcTemplate.update("INSERT INTO todos(title, dateCreated) values (?,?)", "first todo", new Date());
039
040                return dataSource;
041        }
042
043        @Bean
044        public DataSourceTransactionManager transactionManager() {
045                return new DataSourceTransactionManager(dataSource());
046        }
047
048        @Bean
049        public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
050                SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
051                sessionFactory.setDataSource(dataSource());
052                sessionFactory.setTypeAliasesPackage("org.lanyonm.playground.domain");
053                return sessionFactory;
054        }
055}